如何从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中是否有更惯用/更实用的方法?
答案 0 :(得分:17)
head
方法将返回列表的第一个元素,但take(n)
将从列表前面返回最多n
个元素。因此,在您对列表进行随机播放后,只需使用take
:
def takeRandomN[A](n: Int, as: List[A]) =
scala.util.Random.shuffle(as).take(n)
如果您的列表as
比n
短,那么这只是随机播放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)