MutableList.shuffle în Kotlin

Amestecă pe loc elementele unei liste modificabile, într-o ordine aleatorie.

Sintaxă
fun <T> MutableList<T>.shuffle()
fun <T> MutableList<T>.shuffle(random: Random)

Ce face MutableList.shuffle

shuffle() schimbă ordinea elementelor din lista existentă la întâmplare. Nu întoarce nimic. Pentru o listă nouă amestecată, cu originalul neschimbat, folosește shuffled().

Cu un generator Random(seed) cu seed fix, amestecarea dă același rezultat la fiecare rulare (util în teste și jocuri cu „nivel salvat”). Fără argument, rezultatul diferă de fiecare dată.

Parametri

Parametru Descriere
random Opțional: generatorul de numere aleatorii (kotlin.random.Random).

Ce returnează

Nimic; lista este amestecată pe loc.

Exemple

Exemplul 1: Amestecarea unui pachet de cărți

Construim pachetul în ordine, apoi îl amestecăm cu un seed fix și împărțim primele 5 cărți.

import kotlin.random.Random

fun main() {
    val pachet = mutableListOf<String>()
    for (culoare in listOf("♠", "♥")) {
        for (valoare in listOf("A", "K", "Q", "J", "10")) pachet.add("$valoare$culoare")
    }
    pachet.shuffle(Random(3))
    println("Mâna: ${pachet.take(5)}")
}

Rezultat

Mâna: [Q♠, K♠, 10♥, J♥, A♥]

Exemplul 2: Același seed, aceeași ordine

Două liste identice amestecate cu același seed ajung în aceeași ordine. Lista amestecată cu alt seed arată diferit.

import kotlin.random.Random

fun main() {
    val a = mutableListOf(1, 2, 3, 4, 5, 6)
    val b = mutableListOf(1, 2, 3, 4, 5, 6)
    val c = mutableListOf(1, 2, 3, 4, 5, 6)
    a.shuffle(Random(10))
    b.shuffle(Random(10))
    c.shuffle(Random(11))
    println(a)
    println(b)
    println(c)
    println(a == b)
}

Rezultat

[3, 4, 2, 6, 5, 1]
[3, 4, 2, 6, 5, 1]
[5, 4, 3, 1, 2, 6]
true

Greșeli frecvente

  • Scrii val amestecata = lista.shuffle(): rezultatul este Unit. Folosește shuffled() pentru o listă nouă.
  • Folosești java.util.Collections.shuffle cu un java.util.Random: merge, dar în Kotlin e mai simplu lista.shuffle(Random(seed)) din kotlin.random.

Comenzi înrudite

  • Iterable.shuffled: shuffled amestecă elementele într-o listă nouă, iar random alege un element la întâmplare.
  • MutableList.sort: Sortează chiar lista modificabilă (pe loc), crescător, descrescător sau după un câmp; nu întoarce nimic.
  • Iterable.reversed: Întoarce o listă nouă cu elementele în ordine inversă: ultimul devine primul.