Функция zip
Функция zip объединяет две коллекции в одну новую коллекцию,
состоящую из пар элементов. Каждая пара содержит элемент
из первой коллекции и соответствующий элемент из второй коллекции.
Результирующая коллекция имеет размер, равный минимальному размеру
из исходных коллекций.
Синтаксис
Для Iterable, List, Set:
infix fun <T, R> Iterable<T>.zip(other: Iterable<R>): List<Pair<T, R>>
Для Array:
infix fun <T, R> Array<out T>.zip(other: Array<out R>): List<Pair<T, R>>
Для Map (работает с ключами):
infix fun <K, V, R> Map<out K, V>.zip(other: Iterable<R>): List<Pair<Pair<K, V>, R>>
Пример
Объединим два списка с помощью функции zip:
val list1 = listOf('a', 'b', 'c')
val list2 = listOf(1, 2, 3)
val res = list1.zip(list2)
println(res)
Результат выполнения кода:
List<Pair<Char, Int>> [(a, 1), (b, 2), (c, 3)]
Пример
Функция zip работает с массивами:
val arr1 = arrayOf('a', 'b', 'c')
val arr2 = arrayOf(1, 2, 3)
val res = arr1.zip(arr2)
println(res)
Результат выполнения кода:
List<Pair<Char, Int>> [(a, 1), (b, 2), (c, 3)]
Пример
Функция zip работает с множествами:
val set1 = setOf('a', 'b', 'c')
val set2 = setOf(1, 2, 3)
val res = set1.zip(set2)
println(res)
Результат выполнения кода:
List<Pair<Char, Int>> [(a, 1), (b, 2), (c, 3)]
Пример
Если коллекции разного размера, результат будет иметь размер минимальной коллекции:
val list1 = listOf('a', 'b', 'c', 'd')
val list2 = listOf(1, 2, 3)
val res = list1.zip(list2)
println(res)
Результат выполнения кода:
List<Pair<Char, Int>> [(a, 1), (b, 2), (c, 3)]
Пример
Функцию можно использовать в инфиксной форме:
val list1 = listOf('a', 'b', 'c')
val list2 = listOf(1, 2, 3)
val res = list1 zip list2
println(res)
Результат выполнения кода:
List<Pair<Char, Int>> [(a, 1), (b, 2), (c, 3)]