如何从List scala返回多个随机元素

时间:2014-01-09 17:28:59

标签: scala

如何从List中返回多个随机元素。

此问题How to choose a random element from an array in Scala?指的是使用:

import scala.util.Random
val A = Array("please", "help", "me")
Random.shuffle(A.toList).head

我的可变性认为我可以创建一个for循环并继续选择下一个随机元素(不包括已经选择的元素)并将其添加到新的List中。在Scala中是否有更惯用/更实用的方法?

2 个答案:

答案 0 :(得分:17)

head方法将返回列表的第一个元素,但take(n)将从列表前面返回最多n个元素。因此,在您对列表进行随机播放后,只需使用take

def takeRandomN[A](n: Int, as: List[A]) =
  scala.util.Random.shuffle(as).take(n)

如果您的列表asn短,那么这只是随机播放as

答案 1 :(得分:1)

更多“保守”变种而不使用mutables / vars。只是为了锻炼:

def takeRandomFrom[T](n: Int, list: List[T]): List[T] = {
  @tailrec
  def innerTake(n:Int, list: List[T], result: List[T]): List[T] = {
    if (n == 0 || list.isEmpty) {
  result
} else {
  innerTake(n - 1, list.tail, list.head :: result)
}
  }

  innerTake(n, Random.shuffle(list), Nil)
}  

takeRandomFrom(2, Array("please", "help", "me").toList)