Array.sort în Kotlin

Tablouri (Array) Kotlin 1.0

Sortează crescător elementele tabloului chiar în tablou (îl modifică, nu creează altul).

Sintaxă
fun <T : Comparable<T>> Array<out T>.sort()
fun IntArray.sort()
fun <T : Comparable<T>> Array<out T>.sort(deLa: Int, panaLa: Int)

Ce face Array.sort

sort() pe un tablou îl ordonează crescător pe loc: tabloul original se schimbă și funcția nu întoarce nimic. Numerele se sortează după valoare, textele alfabetic (după codurile caracterelor).

Variantele înrudite: sortDescending() sortează descrescător, sortBy { ... } după o proprietate (pentru Array<T>), iar sort(deLa, panaLa) sortează doar o parte, cu panaLa exclus.

Dacă vrei să păstrezi tabloul original, folosește sorted() (întoarce o listă nouă) sau sortedArray() (întoarce un tablou nou).

Parametri

Parametru Descriere
deLa, panaLa Opțional: sortează doar pozițiile deLa … panaLa - 1.

Ce returnează

Nimic (Unit). Tabloul este modificat.

Exemple

Exemplul 1: Sortarea notelor

După sort(), același tablou are elementele în ordine crescătoare. sortDescending() le întoarce.

fun main() {
    val note = intArrayOf(7, 10, 5, 9, 8)
    note.sort()
    println(note.contentToString())
    note.sortDescending()
    println(note.contentToString())
}

Rezultat

[5, 7, 8, 9, 10]
[10, 9, 8, 7, 5]

Exemplul 2: Original păstrat cu sortedArray

sortedArray() creează un tablou nou; orase rămâne neschimbat. Pe a doua linie sortăm doar primele trei poziții.

fun main() {
    val orase = arrayOf("Suceava", "Arad", "Iași", "Brăila", "Cluj")
    val sortate = orase.sortedArray()
    println("original: ${orase.contentToString()}")
    println("sortat:   ${sortate.contentToString()}")

    orase.sort(0, 3)
    println("primele 3 sortate: ${orase.contentToString()}")
}

Rezultat

original: [Suceava, Arad, Iași, Brăila, Cluj]
sortat:   [Arad, Brăila, Cluj, Iași, Suceava]
primele 3 sortate: [Arad, Iași, Suceava, Brăila, Cluj]

Exemplul 3: sortBy pentru obiecte

Pentru un tablou de obiecte alegem după ce proprietate sortăm.

data class Produs(val nume: String, val pret: Double)

fun main() {
    val produse = arrayOf(Produs("cafea", 24.9), Produs("ceai", 9.5), Produs("zahăr", 5.2))
    produse.sortBy { it.pret }
    for (p in produse) println("${p.nume}: ${p.pret} lei")
}

Rezultat

zahăr: 5.2 lei
ceai: 9.5 lei
cafea: 24.9 lei

Greșeli frecvente

  • Scrii val s = tablou.sort() și te aștepți la un tablou: sort() întoarce Unit. Folosește sorted() sau sortedArray() pentru o copie sortată.
  • Sortezi texte cu diacritice și te miri că „Ș” vine după „Z”: sortarea implicită folosește codurile Unicode. Pentru ordinea din dicționar folosește un java.text.Collator pentru limba română.

Comenzi înrudite

  • Iterable.sorted: Întoarce o listă nouă cu elementele în ordine crescătoare (sorted) sau descrescătoare (sortedDescending).
  • MutableList.sort: Sortează chiar lista modificabilă (pe loc), crescător, descrescător sau după un câmp; nu întoarce nimic.
  • Array.contentToString: contentToString afișează elementele tabloului ca text; contentEquals compară două tablouri element cu element.
  • Iterable.sortedBy: Sortează elementele după valoarea calculată de o funcție, de exemplu elevii după medie sau orașele după populație.