Перетасовка по-своему: рандомизация изменяемого списка в Котлине

В Kotlin манипулирование списками и их рандомизация — обычная задача во многих приложениях. Независимо от того, создаете ли вы игру, реализуете систему рекомендаций или просто добавляете в свою программу немного случайности, перетасовку изменяемого списка можно выполнить несколькими способами. В этой статье мы рассмотрим несколько методов рандомизации изменяемого списка в Kotlin, попутно предоставляя разговорные объяснения и примеры кода.

Метод 1: использование функции shuffle()
Самый простой и понятный способ рандомизировать изменяемый список — использовать встроенную функцию shuffle(). Эта функция перемешивает элементы списка на месте, то есть напрямую изменяет исходный список. Вот пример:

val myList = mutableListOf(1, 2, 3, 4, 5)
myList.shuffle()
println(myList) // Output: [4, 1, 2, 5, 3]

Метод 2: использование функции Collections.shuffle()
Если вы предпочитаете более явный подход, вы можете использовать функцию shuffle()из класса Collections. Этот метод принимает изменяемый список в качестве аргумента и перемешивает его элементы. Вот пример:

import java.util.Collections
val myList = mutableListOf(1, 2, 3, 4, 5)
Collections.shuffle(myList)
println(myList) // Output: [3, 1, 4, 5, 2]

Метод 3: реализация алгоритма Фишера-Йейтса
Алгоритм Фишера-Йейтса — популярный алгоритм перетасовки элементов в массиве или списке. Он работает путем перебора списка в обратном порядке и замены каждого элемента случайно выбранным элементом из оставшейся неперетасованной части списка. Вот реализация алгоритма Фишера-Йейтса в Котлине:

import kotlin.random.Random
fun shuffleList(list: MutableList<Int>) {
    val random = Random(System.currentTimeMillis())
    for (i in list.size - 1 downTo 1) {
        val j = random.nextInt(i + 1)
        val temp = list[i]
        list[i] = list[j]
        list[j] = temp
    }
}
val myList = mutableListOf(1, 2, 3, 4, 5)
shuffleList(myList)
println(myList) // Output: [3, 1, 4, 5, 2]

Рандомизация изменяемого списка в Kotlin очень проста, если в вашем распоряжении есть эти методы. Независимо от того, решите ли вы использовать встроенную функцию shuffle(), использовать метод Collections.shuffle()или реализовать алгоритм Фишера-Йейтса, выбор за вами. Так что вперед, добавьте немного случайности в свою программу и начните перетасовку!