如何以简单简洁的方式从列表中获取随机项<如果我想从这个列表中得到一个偶数随机数,那么。
val list = listOf(1, 2, 3, 4, 5, 6, 7, 9).filter { it % 2 == 0 }
注意:
我知道java中有一些类似的答案可以解决这个问题,但我认为我们可以在kotlin中有一个更简洁的方法。
仅仅为了得到一个随机数而洗牌整个列表是对性能的浪费。
使用Kotin 1.3中引入的<code>random()
val randomNumber = listOf(1, 6, 8).random()
对于您的特殊用例,首先过滤列表并从剩余项目中选择一个随机数是有意义的。
val randomEvenNumber = listOf(1, 2, 3, 4, 5, 6, 7, 9).filter { it % 2 == 0 }.random()
我认为最简单、最简洁的方法是创建一个返回随机元素的扩展函数,这样就可以这样使用:
val random = list.random()
扩展函数:
/**
* Returns a random element.
*/
fun <E> List<E>.random(): E? = if (size > 0) get(Random().nextInt(size)) else null
感谢@Francesco comment,这是另一个将随机实例作为随机性来源的函数
/**
* Returns a random element using the specified [random] instance as the source of randomness.
*/
fun <E> List<E>.random(random: java.util.Random): E? = if (size > 0) get(random.nextInt(size)) else null
静态编程语言1.3现在可用于多平台随机数生成器!您可以这样使用它:
import kotlin.random.Random
fun main() {
println(Random.nextBoolean())
println(Random.nextInt())
}
在线尝试!
或者以你的情况来说
fun main() {
val list = (1..9).filter { it % 2 == 0 }
println(list.random())
}
在线尝试!
从静态编程语言1.2开始,我们有了Iterable.shuffled()
。此方法可以帮助您使用List.take()
来提取您想要的元素数量(本示例中只有一个)。
val list = (1..9).filter { it % 2 == 0 }
return list.shuffled().take(1)[0]
此方法的优化程度低于 1.2 之前的版本,但它适用于多平台上下文。根据您的上下文使用所需的那个。
在静态编程语言1.2之前,多平台上下文中不存在生成随机数的解决方案。最简单的解决方案是直接调用平台随机。
在JVM上,如果我们在JDK上,我们使用Random
甚至ThreadLocalRandom
。
import java.util.Random
fun IntRange.random() = Random().nextInt((endInclusive + 1) - start) + start
在JS上,我们使用Math.Random
。
fun IntRange.random() = (Math.random() * ((endInclusive + 1) - start) + start).toInt()
我试图创建一个并发的数据结构,它允许一个线程轮询随机元素,而另一个线程正在写入它。 我担心的是:在极端情况下,例如,在线程A调用(在中)之后,线程B删除最后一个元素。不幸的是,随机索引恰好是最后一个元素(已被删除)的索引。因此,调用将抛出未捕获的。这是我所不期望的-调用失败,即使此列表中仍有元素。 所以我想问:我的担心是真的吗?也许我误解了(或任何其他类型的并发列表)实际上是做什么的?如果我的担心
问题内容: $items = Array(523,3452,334,31,…5346); 此数组的每个项目都是一个数字。 如何获得随机物品? 问题答案: echo $items[array_rand($items)]; array_rand()
问题内容: var items = Array(523,3452,334,31,…5346); 如何获得随机物品? 问题答案:
问题内容: 我想向表中添加一个随机值。虽然我知道如何在一个范围内添加随机整数,但目前我对如何从列表中添加随机选择的项目感到困惑。 假设我有一个用于IM帐户的MYSQL表。我想用随机数据填充它。 该查询应该执行的操作是将联系人的姓氏添加到IM表中,并从我提供的数组中随机选择。例如,该数组将是: 因此,我想为用户添加姓氏以及数组中的随机项之一。 注意: 我知道使用PHP,Perl等编程语言完全可以做到
问题内容: 我有一个生成事实的简单应用。我想合并一个生成随机事实而不是递减的函数。 我的数组看起来像这样。 问题答案: 使用随机类。该类有一个方法,(doc)和引号: 返回一个伪随机数,它从此随机数生成器的序列中提取,在0(含)和指定值(不含)之间均匀分布的int值。nextInt的一般约定是伪随机生成并返回指定范围内的一个int值。所有n个可能的int值均以(近似)相等的概率产生。 因此,您需要
本文向大家介绍php获取随机数组列表的方法,包括了php获取随机数组列表的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了php获取数组中随机数组的实例程序,分享给大家供大家参考。具体实现方法如下: 不用多说,直接贴代码,php中的array_rand很变态,突破了正常人的理解,非常繁琐 例1: 例2: 第一次得到的结果为: 第二次得到的结果为: 第三次得到的结果为: 希望本文所述对大