elm*_*elm 20 random collections scala set scala-collections
例如,对于任何给定的集合,
val fruits = Set("apple", "grape", "pear", "banana")
如何从中获取随机元素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
Rok*_*alj 18
因此,之前发布的每个答案在空间方面都有复杂度O(n),因为它们以某种方式创建了整个集合的副本.这是一个没有任何额外复制的解决方案(因此它是"恒定空间"):
def random[T](s: Set[T]): T = {
  val n = util.Random.nextInt(s.size)
  s.iterator.drop(n).next
}
| 归档时间: | 
 | 
| 查看次数: | 12293 次 | 
| 最近记录: |