在Kotlin中,如果你想要获得一个列表的混洗(shuffle),并且希望这个混洗是保证唯一的,你可以使用以下方法:
以下是一个Kotlin中使用Fisher-Yates洗牌算法来获得唯一混洗列表的示例代码:
import kotlin.random.Random
fun <T> List<T>.uniqueShuffle(): List<T> {
val shuffledList = this.toMutableList()
for (i in shuffledList.size - 1 downTo 1) {
val j = Random.nextInt(i + 1)
shuffledList[i] = shuffledList[j].also { shuffledList[j] = shuffledList[i] }
}
return shuffledList
}
fun main() {
val list = listOf(1, 2, 3, 4, 5)
val shuffled = list.uniqueShuffle()
println(shuffled)
}
j
(范围从0到当前索引i
),然后交换索引i
和j
处的元素。Random.nextInt()
来生成随机索引,确保每次混洗的结果都是随机的。如果你遇到了混洗结果不够随机或者出现了重复排列的问题,可能是因为:
通过上述方法,你可以确保在Kotlin中获得一个保证唯一的列表混洗。
领取专属 10元无门槛券
手把手带您无忧上云