Pair în Kotlin

O pereche de două valori, first și second; a to b este felul scurt de a crea un Pair, folosit în mapOf.

Sintaxă
data class Pair<out A, out B>(val first: A, val second: B)
infix fun <A, B> A.to(that: B): Pair<A, B>

Ce face Pair

Pair ține împreună două valori, eventual de tipuri diferite: Pair("Ana", 9). Le citești cu first și second sau le desfaci dintr-odată: val (nume, nota) = pereche. Fiind o clasă data, are toString ((Ana, 9)), equals și copy.

Funcția to este infix, adică o scrii între cele două valori, fără punct și paranteze: "Ana" to 9 creează exact Pair("Ana", 9). De aceea un map se scrie mapOf("Iași" to 5, "Cluj" to 3): fiecare element este o pereche cheie–valoare.

Pair este practic pentru a returna două valori dintr-o funcție. Când valorile au o semnificație clară și sunt folosite în multe locuri, o data class cu nume potrivite este mai ușor de citit decât first și second.

Parametri

Parametru Descriere
first, second Cele două valori ale perechii.

Ce returnează

Un obiect Pair<A, B>.

Exemple

Exemplul 1: Crearea și desfacerea unei perechi

fun main() {
    val p1 = Pair("Ana", 9)
    val p2 = "Ion" to 7
    println(p1)
    println("${p2.first} are nota ${p2.second}")

    val (nume, nota) = p1
    println("$nume -> $nota")
    println(p1 == ("Ana" to 9))
    println(p2.copy(second = 10))
}

Rezultat

(Ana, 9)
Ion are nota 7
Ana -> 9
true
(Ion, 10)

Exemplul 2: O funcție care returnează două valori

Funcția întoarce minimul și maximul ca pereche, iar apelantul le desface direct în două variabile.

fun minMax(temperaturi: List<Int>): Pair<Int, Int> =
    temperaturi.min() to temperaturi.max()

fun main() {
    val (min, max) = minMax(listOf(12, -3, 8, 21, 5))
    println("Minim: $min °C, maxim: $max °C")

    val populatie = mapOf("Iași" to 271_692, "Cluj-Napoca" to 286_598)
    for ((oras, locuitori) in populatie) {
        println("$oras: $locuitori locuitori")
    }
    println(populatie.toList().first())
}

Rezultat

Minim: -3 °C, maxim: 21 °C
Iași: 271692 locuitori
Cluj-Napoca: 286598 locuitori
(Iași, 271692)

Greșeli frecvente

  • Folosești Pair peste tot în loc de clase. p.first și p.second nu spun nimic despre conținut; pentru date importante scrie o data class.
  • Scrii mapOf("a", 1). mapOf primește perechi: mapOf("a" to 1).

Comenzi înrudite

  • Triple: Un grup de trei valori, first, second și third, care se poate desface în trei variabile.
  • maxOf: Returnează cea mai mare (maxOf) sau cea mai mică (minOf) dintre două sau mai multe valori comparabile.