首页 > 解决方案 > x 和 y 之间的一组随机数,需要是唯一的,使用 Kotlin

问题描述

例如,在 Kotlin 中,我试图将 5 个数字放入 Array、List 或 ArrayList 中,这 5 个数字来自 6 到 30。一直在网上寻找,我最终得到了以下工作,但它不是t 为列表选择唯一的数字,因此它可以选择类似 6、6、20、24、24 的数字。

val cardNumbersCol1 = (1..5).map { (6..30).random() }

有一个更好的方法吗?

我还在边走边学。

谢谢

标签: androidandroid-studiokotlin

解决方案


另一种方法是使用序列生成器生成一个随机 Ints 序列,然后按 distinct 过滤并获取您想要的前几个:

fun randomGenerator(from: Int, 
                    until: Int, 
                    random: Random = Random.Default): Sequence<Int> = sequence {
    while(true) {
        yield(random.nextInt(from, until))
    }
}

fun main() {
    val someRandomInts: Set<Int> =
        randomGenerator(6, 30)
            .distinct()
            .take(5)
            .toSet()
    println(someRandomInts)
}

或者,您可以定义一个扩展函数IntRange来使它更漂亮:

fun IntRange.randomSequence(random: Random = Random.Default): Sequence<Int> = sequence {
    while(true) {
        yield(this@randomSequence.random(random))
    }
}

并使用:

val someRandomInts: Set<Int> =
    (6..30).randomSequence().distinct().take(5).toSet()

推荐阅读