rust - 一次映射一个迭代器 n 个项目

标签 rust

我正在尝试映射迭代器的项目,一次 N 个。像这样的事情:

let a = vec![1, 2, 3, 4];
let b = a.iter().map2(|i, j| i + j);

b.collect()然后会产生 b = [3, 7]

有没有简单的方法可以实现这一点?

最佳答案

不符合规定。您需要将其分解为“将 vec 拆分为不相交子集的迭代器”和“对每个子集求和”:

let a = vec![1, 2, 3, 4];
let b = a.chunks(2).map(|chunk| chunk.iter().sum::<i32>());
println!("b = {:?}", b.collect::<Vec<_>>());

请注意,当 a 是通用迭代器时(它依赖于它是一个切片),这不起作用,尽管您可以使用 itertools 使其工作。 crate :

use itertools::Itertools;

let a = vec![1, 2, 3, 4];
let a = a.iter().cloned(); // we can't rely on a being a Vec any more.
let b = (&a.chunks(2)).into_iter()
    .map(|chunk| chunk.sum::<i32>())
    .collect::<Vec<_>>();
println!("b = {:?}", b);

关于rust - 一次映射一个迭代器 n 个项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46902648/

相关文章:

rust - 无法分配给 `x`,因为它是借用的

rust - 使用 if let 时如何指定无法推断的类型?

rust - 有没有办法使用 Rust stable 中的不稳定模块?

struct - 在Rust中传递对结构的引用

arrays - 如何将 GenericArray<T, ?> 转换为相同长度的数组?

rust - Rust 的数据类型(例如 float)在哪里定义?

vector - 向量中的可变结构

rust - "the size for values of type cannot be known at compilation time"尝试从函数返回 dyn Traits 向量时

rust - 如何按字符串字段对结构的 Vec 进行排序?

rust - 为什么编译器不推断 impl 特征返回值的关联类型的具体类型?