Метод flatten
Метод flatten преобразует итератор,
элементы которого сами являются итераторами,
в один плоский итератор. Он последовательно
проходит по каждому вложенному итератору
и возвращает его элементы по одному.
Метод не принимает параметров и возвращает
новый итератор типа Flatten.
Метод особенно удобен, когда нужно обработать коллекцию коллекций как единую последовательность элементов.
Синтаксис
iter.flatten()
Пример
Давайте развернем вектор векторов в один плоский итератор и соберем результат в новый вектор:
fn main()
{
let nested = vec![vec![1, 2], vec![3, 4], vec![5]];
let res: Vec<i32> = nested.into_iter().flatten().collect();
println!("{:?}", res);
}
Результат выполнения кода:
[1, 2, 3, 4, 5]
Пример
Давайте развернем вектор строк в итератор отдельных символов:
fn main()
{
let words = vec!["abcde", "12345"];
let res: Vec<char> = words.into_iter().flatten().collect();
println!("{:?}", res);
}
Результат выполнения кода:
['a', 'b', 'c', 'd', 'e', '1', '2', '3', '4', '5']
Пример
Давайте используем flatten вместе
с map, чтобы развернуть результаты
преобразования каждого элемента:
fn main()
{
let nums = vec![1, 2, 3];
let res: Vec<i32> = nums
.into_iter()
.map(|x| vec![x, x * 10])
.flatten()
.collect();
println!("{:?}", res);
}
Результат выполнения кода:
[1, 10, 2, 20, 3, 30]