Метод zip
Метод zip принимает второй итератор
и возвращает новый итератор, который
поочерёдно объединяет элементы обоих
итераторов в кортежи вида (a, b).
Параметром метод принимает итератор,
который нужно объединить с текущим.
Итерация прекращается, как только один
из итераторов закончится.
Синтаксис
iter1.zip(iter2)
Пример
Давайте объединим два вектора чисел
[1, 2, 3] и [4, 5, 6]
в итератор пар:
fn main()
{
let vec1 = vec![1, 2, 3];
let vec2 = vec![4, 5, 6];
for (a, b) in vec1.iter().zip(vec2.iter()) {
println!("({}, {})", a, b);
}
}
Результат выполнения кода:
(1, 4)
(2, 5)
(3, 6)
Пример
Если итераторы имеют разную длину,
то zip остановится на самом
коротком. Давайте объединим векторы
[1, 2, 3, 4, 5] и
["a", "b", "c"]:
fn main()
{
let nums = vec![1, 2, 3, 4, 5];
let letters = vec!["a", "b", "c"];
for (n, l) in nums.iter().zip(letters.iter()) {
println!("({}, {})", n, l);
}
}
Результат выполнения кода:
(1, "a")
(2, "b")
(3, "c")
Пример
Давайте соберём результат zip
в вектор кортежей с помощью метода
collect:
fn main()
{
let vec1 = vec![1, 2, 3];
let vec2 = vec![4, 5, 6];
let res: Vec<(i32, i32)> =
vec1.iter().zip(vec2.iter())
.map(|(a, b)| (*a, *b))
.collect();
println!("{:?}", res);
}
Результат выполнения кода:
[(1, 4), (2, 5), (3, 6)]