Функция unzip

Функция unzip выполняет разделение коллекции, состоящей из объектов Pair, на два отдельных списка. Первый список будет содержать первые элементы всех пар, второй список - вторые элементы всех пар. Функция возвращает объект Pair, содержащий два списка List.

Импорт

kotlinimport kotlin.collections.unzip

Синтаксис

kotlininline fun <T, R> Iterable<Pair<T, R>>.unzip(): Pair<List<T>, List<R>>
kotlininline fun <T, R> Array<out Pair<T, R>>.unzip(): Pair<List<T>, List<R>>

Поддерживаемые типы коллекций

Функция unzip работает со следующими типами коллекций:

Для Map функция unzip не применяется, так как Map уже представляет собой коллекцию пар ключ-значение, но имеет собственные методы для работы с ключами и значениями.

Пример

Разделим список пар чисел на два отдельных списка:

kotlinval pairs = listOf(Pair(1, 'a'), Pair(2, 'b'), Pair(3, 'c'))
val (numbers, letters) = pairs.unzip()

println("Numbers: $numbers")
println("Letters: $letters")

Результат выполнения кода:

kotlinNumbers: [1, 2, 3]
Letters: ['a', 'b', 'c']

Пример

Разделим массив пар строк на два отдельных списка:

kotlinval 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")

Результат выполнения кода:

kotlinFruits: ["apple", "banana", "grape"]
Colors: ["red", "yellow", "purple"]

Пример

Работа с множеством пар:

kotlinval pairsSet = setOf(
  Pair(10, 100),
  Pair(20, 200),
  Pair(30, 300)
)

val (firstValues, secondValues) = pairsSet.unzip()

println("First values: $firstValues")
println("Second values: $secondValues")

Результат выполнения кода:

kotlinFirst values: [10, 20, 30]
Second values: [100, 200, 300]

Пример

Использование деструктуризации для получения результата:

kotlinval data = listOf(
  Pair("John", 25),
  Pair("Alice", 30),
  Pair("Bob", 28)
)

val (names, ages) = data.unzip()

println("Names: $names")
println("Ages: $ages")

Результат выполнения кода:

kotlinNames: ["John", "Alice", "Bob"]
Ages: [25, 30, 28]

Смотрите также

  • функцию zip,
    которая объединяет две коллекции в одну коллекцию пар
  • функцию partition,
    которая разделяет коллекцию на две по условию
  • функцию flatMap,
    которая преобразует и объединяет элементы коллекции
  • функцию map,
    которая преобразует элементы коллекции