是否有更直接,更易理解的方式来完成以下任务:

fn main() {
    let a = [1, 2, 3];
    let b = [4, 5, 6];
    let c = [7, 8, 9];
    let iter = a.iter()
        .zip(b.iter())
        .zip(c.iter())
        .map(|((x, y), z)| (x, y, z));
}

也就是说,如何从n个可迭代对象构建一个生成n个元组的迭代器?

最佳答案

您可以使用 crate itertools中的izip!()宏,该宏可用于任意多个迭代器:

use itertools::izip;

fn main() {

    let a = [1, 2, 3];
    let b = [4, 5, 6];
    let c = [7, 8, 9];

    // izip!() accepts iterators and/or values with IntoIterator.
    for (x, y, z) in izip!(&a, &b, &c) {

    }
}

您必须在Cargo.toml中添加对itertools的依赖,使用最新版本。例子:
[dependencies]
itertools = "0.8"

关于iterator - 如何压缩两个以上的迭代器?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29669287/

10-16 04:41