Vec<Vec> в Vec

#vector #rust #concatenation #separator

#Ржавчина

Вопрос:

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

Как я могу собрать в единое Vec целое все значения, содержащиеся во всех Vec s в a ?

Ответ №1:

Вы можете использовать оператор flatten для удаления вложенности векторов.

Следующий пример взят из ссылки.

 let data = vec![vec![1, 2, 3, 4], vec![5, 6]];
let flattened = data.into_iter().flatten().collect::<Vec<u8>>();
assert_eq!(flattened, amp;[1, 2, 3, 4, 5, 6]);
 

Ответ №2:

Ответ Стива правильный, но вы также должны знать о flat_map — есть большая вероятность, что это то, что вы действительно хотите использовать, что это сделает ваш код проще и быстрее. Вероятно, вам никогда не нужно создавать Vec из Vecs — просто итератор итераторов, который вы flat_map, а затем собираете.

Ответ №3:

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