对于一组给定的迭代器 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/