One thing I never thought about before is that if you need to get multiple, unique, random elements from a list of elements, one solution to the problem is to shuffle the list and then take as many elements as you want/need. For instance, if you want three unique, random elements from a list of integers in Scala, you can do this:
scala> val list = List(1,2,3,4,5,1,2,3,4,5) list: List[Int] = List(1, 2, 3, 4, 5, 1, 2, 3, 4, 5) scala> val uniq = list.distinct uniq: List[Int] = List(1, 2, 3, 4, 5) scala> val shuffled = scala.util.Random.shuffle(uniq) shuffled: List[Int] = List(1, 4, 5, 2, 3) scala> val firstThree = shuffled.take(3) firstThree: List[Int] = List(1, 4, 5)
As that solution shows, you start with a simple list; get the unique/distinct elements from the list; shuffle those elements to create a new list; then take the first three elements from the shuffled list. That’s probably not a great solution for huge lists, but for many simple lists it’s a way to get multiple random elements from the list.