elm*_*elm 20 random collections scala set scala-collections
例如,对于任何给定的集合,
val fruits = Set("apple", "grape", "pear", "banana")
Run Code Online (Sandbox Code Playgroud)
如何从中获取随机元素fruits?
非常感谢.
Gov*_*ngh 20
转换成Vector并从中获取随机元素
scala> val fruits = Set("apple", "grape", "pear", "banana")
fruits: scala.collection.immutable.Set[String] = Set(apple, grape, pear, banana)
scala> import scala.util.Random
import scala.util.Random
scala> val rnd=new Random
rnd: scala.util.Random = scala.util.Random@31a9253
scala> fruits.toVector(rnd.nextInt(fruits.size))
res8: String = apple
Run Code Online (Sandbox Code Playgroud)
Rok*_*alj 18
因此,之前发布的每个答案在空间方面都有复杂度O(n),因为它们以某种方式创建了整个集合的副本.这是一个没有任何额外复制的解决方案(因此它是"恒定空间"):
def random[T](s: Set[T]): T = {
val n = util.Random.nextInt(s.size)
s.iterator.drop(n).next
}
Run Code Online (Sandbox Code Playgroud)