rust - 如何 Iterator::chain 一个迭代器向量?

标签 rust

对于一组给定的迭代器 a、b、c,可以使用 a.chain(b).chain(c) 成功地将它们链接起来。由于我尝试编写的 CLI 实用程序提供了一个路径向量(字符串,--dirs "a/b/c""d/e/f"...),我想使用 walkd_dir 在每个上,然后将它们链接在一起。我的第一个想法是:

fn main() {
    let a = 0..3;
    let b = 3..6;
    let c = 6..9;
    let v = vec![b, c];
    v.iter().cloned().fold(a, |acc, e| acc.chain(e));
}

http://is.gd/hfNQd2 , 返回

<anon>:6:40: 6:52 error: mismatched types:
 expected `core::ops::Range<_>`,
    found `core::iter::Chain<core::ops::Range<_>, core::ops::Range<_>>`
(expected struct `core::ops::Range`,
    found struct `core::iter::Chain`) [E0308]
<anon>:6     v.iter().cloned().fold(a, |acc, e| acc.chain(e));

另一次尝试 http://is.gd/ZKdxZM ,尽管 a.chain(b).chain(c) 有效。

最佳答案

使用flat_map :

fn main() {
    let a = 0..3;
    let b = 3..6;
    let c = 6..9;
    let v = vec![a, b, c];
    v.iter().flat_map(|it| it.clone());
}

关于rust - 如何 Iterator::chain 一个迭代器向量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32797777/

相关文章:

string - mut循环内的字符串重新声明

rust - 不了解此代码: Rust上的“移动/复制特征”错误

linux - 确定是否在 SSD 上的跨平台方法?

docker - 编译 azure iot edge 的 edgelet 模块时出现 cargo 错误

rust - 了解生命周期 : borrowed value does not live enough

rust - 如何将一片特征对象传递给C

rust - 以原子方式更新多个线程之间重叠的向量或切片的正确方法是什么?

rust - 将函数指针添加到结构的生命周期问题

multithreading - 卡在Rust中的 channel 接收器迭代器上?

rust - 有没有一种简单的方法可以将可变引用传递给函数值 `Fn(T)` ?