如何有效地从scala中的枚举中选择一个随机元素?

时间:2016-04-03 14:24:15

标签: scala random enums

我有一个这样的枚举:

object Animals extends Enumeration {
  type Animals = Value
  val Monkey = Value("Monkey")
  val Lion = Value("Lion")
  val Dog = Value("Dog")
  val Cat = Value("Cat")
}

我需要随机选择此枚举中的元素。我怎么能在scala中有效地做到这一点?

1 个答案:

答案 0 :(得分:5)

documentation节目

不到一分钟

final def maxId: Int

  

高于用于识别此枚举中的值的最高整数的那个。

final def apply(x: Int): Value

  

给定id x

的此枚举的值

所以

Animals(scala.util.Random.nextInt(Animals.maxId))
//> res0: recursion.recursion.Animals.Value = Monkey

(假设使用了所有值,并且您没有将初始值传递给构造函数)

或者您可以使用Animals.values枚举值,然后参考this question