当我使用迭代器时,我经常发现自己需要显式地取消引用值。以下代码查找向量中所有元素对的和:
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));
}
与使用map
相比,有没有更好的方法执行取消引用?
甚至在没有明确引用的情况下执行这些类型的操作的方法也会更好。
使用xi.iter()
表示您正在明确要求对xi
中的值进行references的迭代器。因为在这种情况下您不希望引用,而是想要实际值,所以您想使用xi.into_iter()
来获取值的迭代器。
因此您可以更改
.map(|xi| xi.iter().map(|bar| **bar).sum::<i32>())
to
.map(|xi| xi.into_iter().sum::<i32>())