我有两个迭代器,它们最终会合并到同一个 Vec
中,但我需要在合并之前对最终结果执行过滤。例如:
let a = vec![1, 2, 3, 4].into_iter().map(|x| x * 2);
let b = vec![0, 3, 5, 6, 7].into_iter().map(|x| x * 3);
let c = a + b;
assert_eq!(
c.filter(|&x| x > 5).collect::<Vec<u8>>(),
vec![6, 8, 9, 15, 18, 21]
);
我可以做这样的事情:
let mut a = vec![1, 2, 3, 4]
.into_iter()
.map(|x| x * 2)
.collect::<Vec<u8>>();
let b = vec![0, 3, 5, 6, 7]
.into_iter()
.map(|x| x * 3)
.collect::<Vec<u8>>();
a.extend(b);
assert_eq!(
a.into_iter().filter(|&x| x > 5).collect::<Vec<u8>>(),
vec![6, 8, 9, 15, 18, 21]
);
但在我的例子中,额外的分配会降低性能(是的,我检查过!)
最佳答案
您正在寻找 Iterator::chain
let a = vec![1, 2, 3, 4].into_iter().map(|x| x * 2);
let b = vec![0, 3, 5, 6, 7].into_iter().map(|x| x * 3);
let c = a.chain(b);
assert_eq!(
c.filter(|&x| x > 5).collect::<Vec<u8>>(),
vec![6, 8, 9, 15, 18, 21]
);
关于rust - 有没有办法将两个迭代器合并到同一个 Vec 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55156459/