首页 > 解决方案 > 在迭代器链中取消引用值的最佳方法是什么?

问题描述

当我使用迭代器时,我经常发现自己需要显式地取消引用值。以下代码查找向量中所有元素对的总和:

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

更好的方法是执行这些类型的操作,而无需显式取消引用。

标签: rustiterator

解决方案


Usingxi.iter()意味着您明确要求xi. 由于在这种情况下您不想要引用,而是想要实际值,因此您希望使用它xi.into_iter()来获取值的迭代器。

所以你可以改变

.map(|xi| xi.iter().map(|bar| **bar).sum::<i32>())

.map(|xi| xi.into_iter().sum::<i32>())

游乐场链接


推荐阅读