Ce face Iterable.shuffled
shuffled() întoarce o listă nouă cu aceleași elemente într-o ordine aleatorie. random() alege un singur element la întâmplare dintr-o colecție. La fiecare rulare rezultatul este altul.
Ambele acceptă un generator Random. Cu un seed fix, de exemplu Random(42), rezultatul este același la fiecare rulare: util pentru teste și pentru exemple reproductibile (cum sunt cele de pe această pagină).
random() pe o colecție goală aruncă NoSuchElementException; randomOrNull() întoarce null. Pe o MutableList, shuffle() amestecă pe loc.
Parametri
| Parametru | Descriere |
|---|---|
random |
Opțional: generatorul de numere aleatorii. Fără el se folosește Random.Default. |
Ce returnează
shuffled: o listă nouă amestecată. random: un element al colecției.
Exemple
Exemplul 1: Ordinea de prezentare la proiect
Cu Random(42) ordinea este aceeași la fiecare rulare. Fără argument, ar fi alta de fiecare dată.
import kotlin.random.Random
fun main() {
val echipe = listOf("Ana", "Ion", "Maria", "Radu", "Elena")
val ordine = echipe.shuffled(Random(42))
ordine.forEachIndexed { i, nume -> println("${i + 1}. $nume") }
println("Lista originală: $echipe")
}
Rezultat
1. Ana
2. Elena
3. Maria
4. Ion
5. Radu
Lista originală: [Ana, Ion, Maria, Radu, Elena]
Exemplul 2: Câștigătorul unei tombole
random alege un nume din listă. Pe lista goală folosim randomOrNull, ca să nu se oprească programul.
import kotlin.random.Random
fun main() {
val participanti = listOf("Andrei", "Bianca", "Cosmin", "Diana")
val generator = Random(7)
println("Câștigător: ${participanti.random(generator)}")
val nimeni = emptyList<String>()
println(nimeni.randomOrNull(generator) ?: "Niciun participant")
}
Rezultat
Câștigător: Diana
Niciun participant
Exemplul 3: Întrebări de test amestecate
Amestecăm întrebările și luăm primele trei: fiecare elev primește alt set, dar fără repetări.
import kotlin.random.Random
fun main() {
val intrebari = (1..10).map { "Întrebarea $it" }
val test = intrebari.shuffled(Random(2024)).take(3)
println(test)
}
Rezultat
[Întrebarea 10, Întrebarea 6, Întrebarea 7]
Greșeli frecvente
- Apelezi
random()de trei ori ca să alegi trei elemente diferite: pot ieși repetări. Foloseșteshuffled().take(3). - Testezi cod care folosește
shuffled()fără seed și rezultatul diferă la fiecare rulare. Dă funcției unRandom(seed)fix.
Comenzi înrudite
MutableList.shuffle: Amestecă pe loc elementele unei liste modificabile, într-o ordine aleatorie.Iterable.sorted: Întoarce o listă nouă cu elementele în ordine crescătoare (sorted) sau descrescătoare (sortedDescending).Iterable.reversed: Întoarce o listă nouă cu elementele în ordine inversă: ultimul devine primul.Iterable.take: take(n) întoarce primele n elemente, iar drop(n) întoarce tot ce rămâne după ce sari peste primele n.