Функция unzip
Функция unzip выполняет разделение коллекции,
состоящей из объектов Pair, на два отдельных списка.
Первый список будет содержать первые элементы всех пар,
второй список - вторые элементы всех пар.
Функция возвращает объект Pair, содержащий
два списка List.
Импорт
import kotlin.collections.unzip
Синтаксис
inline fun <T, R> Iterable<Pair<T, R>>.unzip(): Pair<List<T>, List<R>>
inline fun <T, R> Array<out Pair<T, R>>.unzip(): Pair<List<T>, List<R>>
Поддерживаемые типы коллекций
Функция unzip работает со следующими типами коллекций:
Iterable<Pair<T, R>>Array<Pair<T, R>>List<Pair<T, R>>Set<Pair<T, R>>MutableList<Pair<T, R>>MutableSet<Pair<T, R>>
Для Map функция unzip не применяется,
так как Map уже представляет собой коллекцию пар
ключ-значение, но имеет собственные методы для работы
с ключами и значениями.
Пример
Разделим список пар чисел на два отдельных списка:
val pairs = listOf(Pair(1, 'a'), Pair(2, 'b'), Pair(3, 'c'))
val (numbers, letters) = pairs.unzip()
println("Numbers: $numbers")
println("Letters: $letters")
Результат выполнения кода:
Numbers: [1, 2, 3]
Letters: ['a', 'b', 'c']
Пример
Разделим массив пар строк на два отдельных списка:
val pairsArray = arrayOf(
Pair("apple", "red"),
Pair("banana", "yellow"),
Pair("grape", "purple")
)
val result = pairsArray.unzip()
val fruits = result.first
val colors = result.second
println("Fruits: $fruits")
println("Colors: $colors")
Результат выполнения кода:
Fruits: ["apple", "banana", "grape"]
Colors: ["red", "yellow", "purple"]
Пример
Работа с множеством пар:
val pairsSet = setOf(
Pair(10, 100),
Pair(20, 200),
Pair(30, 300)
)
val (firstValues, secondValues) = pairsSet.unzip()
println("First values: $firstValues")
println("Second values: $secondValues")
Результат выполнения кода:
First values: [10, 20, 30]
Second values: [100, 200, 300]
Пример
Использование деструктуризации для получения результата:
val data = listOf(
Pair("John", 25),
Pair("Alice", 30),
Pair("Bob", 28)
)
val (names, ages) = data.unzip()
println("Names: $names")
println("Ages: $ages")
Результат выполнения кода:
Names: ["John", "Alice", "Bob"]
Ages: [25, 30, 28]