有没有更直接易读的方法来实现以下目标:

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个iterables生成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中添加对itertools的依赖.toml,使用最新的版本.例子:

[dependencies]
itertools = "0.8"

Rust相关问答推荐

有条件默认实现

如何在Rust中实现Functor trait?

抽象RUST中的可变/不可变引用

Rust TcpStream不能在读取后写入,但可以在不读取的情况下写入.为什么?

rust 迹-内存管理-POP所有权-链表

如何编写一个以一个闭包为参数的函数,该函数以另一个闭包为参数?

如何使用盒装枚举进行模式匹配?

为什么我们需要std::thread::scope,如果我们可以使用thread.join()在函数的生命周期内删除引用?

Rust&;Tokio:如何处理更多的信号,而不仅仅是SIGINT,即SIGQUE?

Rust FFI 和 CUDA C 性能差异

sha256 摘要仅适用于 &*

有什么办法可以追踪泛型的单态化过程吗?

&self 参数在 trait 的功能中是必需的吗?

SDL2 没有在终端键上触发?

为什么在 macOS / iOS 上切换 WiFi 网络时 reqwest 响应会挂起?

判断 is_ok 后重用结果

如何在 Rust 中编写修改 struct 的函数

在 FFI 的上下文中,未初始化是什么意思?

提取 struct 生成宏中字段出现的索引

当引用不再被borrow 时,Rust 不会得到它