rust - 有没有办法将两个迭代器合并到同一个 Vec 中?

标签 rust iterator

我有两个迭代器,它们最终会合并到同一个 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/

相关文章:

rust - 结构必须长于成员引用

c++ - 使用 STL 和一元函数适配仿函数检查列表成员资格

loops - 如何在 Lua 中的二维表上创建迭代器?

c++ - C++ 中的 IEnumerable?

java - 仅用一个 Iterator Java 迭代两个列表

c++ - 字符串迭代器不在字符串末尾停止

rust - Rust 中有没有类似于 Go 中的 bufio.Reader.ReadSlice 的东西?

字符串以相反的顺序加入 Vec 中的字符串,没有 `collect`

cmake - Rust中的Dockerfile错误,x86_64-unknown-linux-musl

rust - 对堆积的 mpsc channel 消息进行去重