在迭代器链中取消引用值的最佳方法是什么?

问题描述 投票:-1回答:1

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

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相比,有没有更好的方法执行取消引用?

甚至在没有明确引用的情况下执行这些类型的操作的方法也会更好。

rust iterator
1个回答
0
投票

使用xi.iter()表示您正在明确要求对xi中的值进行references的迭代器。因为在这种情况下您不希望引用,而是想要实际值,所以您想使用xi.into_iter()来获取值的迭代器。

因此您可以更改

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

to

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

Playground Link

© www.soinside.com 2019 - 2024. All rights reserved.