#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]