Освой Kotlin играючи

Сайт Александра Климова

Шкодим

/* Моя кошка замечательно разбирается в программировании. Стоит мне объяснить проблему ей - и все становится ясно. */
John Robbins, Debugging Applications, Microsoft Press, 2000

Pair и Triple

Pair
Triple

Часто требуются пары значений, как "ключ-значение". Для таких случаев выделен отдельный класс Pair. Относится к группе data class, а значит имеет методы equals(), hashCode(), component1, toString() и т.д. Также может использоваться для хранения связанных данных, например, координаты (точки x и y) и другие похожие случаи. В других языках есть похожий тип Tuple.

Pair

Создать пару можно через ключевое слово to, а затем обращаться к элементам через first и second.


val currency = "USA" to "Dollar"
println(currency.first)
println(currency.second)

Можно создать одну переменную, затем к ней присоединить значение/вторую переменную.


val cat = "Барсик"
val pair = cat.to(7)
println("${pair.first}у ${pair.second} лет") // Барсику 7 лет

Можно создать пару новых переменных и присвоить им объект Pair, они автоматически заберут нужные значения из пары.


val currency = "USA" to "Dollar"

val(country, money) = currency
println(country)
println(money)

Способ объединения нескольких переменных в скобки применим и к другим классам.

Из пар можно создавать списки.


val cats = listOf("Васька" to "Москва", "Барсик" to "Мурманск")

Пара может быть из разных типов.


val pair = "Moscow" to 1247 // Pair<String, Int>

Пару можно создать явно, используя конструктор.


val pair = Pair("Moscow", 1247)

Если брать ситуацию с координатами, то код будет следующим (разные варианты).


val coordinates: Pair<Int, Int> = Pair(2, 3)
val coordinates = Pair(2, 3)
val coordinates = 2 to 3

Triple

Класс Triple похож на Pair, но использует уже три значения.


val coordinates3D = Triple(2, 3, 1)
//val (x3, y3, z3) = coordinates3D
// или
val x3 = coordinates3D.first
val y3 = coordinates3D.second
val z3 = coordinates3D.third

Если вы хотите проигнорировать одно из значений, то используйте символ подчёркивания.


val coordinates3D = Triple(2, 3, 4)
val (x, y, _) = coordinates3D

Удобно использовать для дат.


val birthday = Triple(27, 7, 1996)
println("День рождения: ${birthday.first}")
println("Месяц рождения: ${birthday.second}")
println("Год рождения: ${birthday.third}")
Реклама