Метод chain
Метод chain класса Iterator объединяет
текущий итератор с другим итератором в один новый
итератор. Сначала перебираются все элементы первого
итератора, а затем все элементы второго. Параметром
метод принимает второй итератор, элементы которого
нужно добавить после элементов текущего итератора.
Метод возвращает новый итератор типа
Chain, который реализует трейт
Iterator и лениво перебирает элементы
обоих итераторов по очереди.
Синтаксис
iterator.chain(other)
Пример
Давайте объединим два вектора с числами
vec![1, 2, 3] и vec![4, 5]:
fn main()
{
let first = vec![1, 2, 3];
let second = vec![4, 5];
let res: Vec<i32> = first.iter()
.chain(second.iter())
.copied()
.collect();
println!("{:?}", res);
}
Результат выполнения кода:
[1, 2, 3, 4, 5]
Пример
Давайте объединим две строки
"abcde" и "12345" и выведем
каждый символ по отдельности:
fn main()
{
let first = "abcde";
let second = "12345";
for ch in first.chars().chain(second.chars()) {
println!("{}", ch);
}
}
Результат выполнения кода:
"a"
"b"
"c"
"d"
"e"
"1"
"2"
"3"
"4"
"5"
Пример
Давайте объединим три итератора в цепочку и соберём результат в вектор:
fn main()
{
let a = vec![1, 2, 3];
let b = vec![4, 5];
let c = vec![6, 7, 8];
let res: Vec<i32> = a.iter()
.chain(b.iter())
.chain(c.iter())
.copied()
.collect();
println!("{:?}", res);
}
Результат выполнения кода:
[1, 2, 3, 4, 5, 6, 7, 8]
Пример
Давайте объединим итератор чисел с пустым
итератором из метода empty:
fn main()
{
let nums = vec![1, 2, 3];
let res: Vec<i32> = nums.iter()
.chain(std::iter::empty())
.copied()
.collect();
println!("{:?}", res);
}
Результат выполнения кода:
[1, 2, 3]