android - 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() }
有一个更好的方法吗?
我还在边走边学。
谢谢
解决方案
另一种方法是使用序列生成器生成一个随机 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()
推荐阅读
- django - Django - 如何创建文件并将其保存到 ModelSerializer 中的字段
- yocto - 如何在 qemu 中运行 yocto 开发的树莓派镜像?
- ssh - ssh v2 最大压缩 (xzip/7zip)
- azure - 在更新 Nuget 时触发使用 Nuget 的项目的构建
- android - 存储文件在签名的 APK 中不起作用,但在调试 APK 中起作用
- javascript - 为什么 trim() 没有删除我的 Vue 应用程序中的前导空格?
- angular - TypeError:无法读取未定义 Ionic 3 的属性“toLowerCase”
- javascript - 如何检测 React 功能组件之外的点击
- node.js - 未设置“on data”事件侦听器时,nodejs http 模块会做什么?
- python - 如何在python中创建堆叠的条形图