rust - 在迭代器链中取消引用值的最佳方法是什么?
问题描述
当我使用迭代器时,我经常发现自己需要显式地取消引用值。以下代码查找向量中所有元素对的总和:
extern crate itertools;
use crate::itertools::Itertools;
fn main() {
let x: Vec<i32> = (1..4).collect();
x.iter()
.combinations(2)
.map(|xi| xi.iter().map(|bar| **bar)
.sum::<i32>())
.for_each(|bar| println!("{:?}", bar));
}
有没有比使用 a 更好的方法来执行取消引用map
?
更好的方法是执行这些类型的操作,而无需显式取消引用。
解决方案
Usingxi.iter()
意味着您明确要求对xi
. 由于在这种情况下您不想要引用,而是想要实际值,因此您希望使用它xi.into_iter()
来获取值的迭代器。
所以你可以改变
.map(|xi| xi.iter().map(|bar| **bar).sum::<i32>())
至
.map(|xi| xi.into_iter().sum::<i32>())
推荐阅读
- git - Git 身份验证被破坏
- laravel - 更改个人资料图片 laravel 8
- html - white-space: nowrap 在 Google Chrome 移动设备的底部生成额外的空白空间
- java - 理解弱引用
- javascript - 单击时将活动类切换到按钮
- java - 在循环中执行 jar 的效率有多低?有哪些替代方案?
- javascript - 如何使用 jquery 在 AJAX 中调用警报?
- precision - 如何评价非线性模型的精度?
- python - Python 中的 XRP Warp 钱包
- progressive-web-apps - 保护 wasm 二进制文件的最佳实践