将 Vec<Vec<T>> 转换为 Vec<T>

17
let a = vec![ vec![1, 2], vec![3, 4], vec![5, 6] ];

如何将 a 中所有 Vec 包含的值收集到单个 Vec 中?

3个回答

17
你可以使用展平(flatten)操作符来消除向量的嵌套。
以下示例取自链接。
let data = vec![vec![1, 2, 3, 4], vec![5, 6]];
let flattened = data.into_iter().flatten().collect::<Vec<u8>>();
assert_eq!(flattened, &[1, 2, 3, 4, 5, 6]);

5

Steve的回答是正确的,但你也应该了解flat_map -- 很有可能这才是你真正想使用的,它可以使你的代码更简单、更快。你可能永远不需要创建一个Vec的Vecs -- 只需要一个Iterator的Iterators,然后进行flat_map和collect操作。


-2

flat_map 还可以将一个向量的向量展平。

let a = vec![vec![1, 2], vec![3, 4], vec![5, 6]];  
let merged = a.into_iter().flat_map(|s| s).collect::<Vec<i32>>();  
println!("{:?}", merged);

[1, 2, 3, 4, 5, 6]  

Rust Playground

Rust Playground


为什么不使用更简单的flatten()呢? - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接