是否有可能在kotlin中随机获取枚举类的元素?

Jac*_*cob 1 kotlin

就像标题说的

class Answers {
    enum class Answer(text: String) {
        YES("Yes."),
        No("No."),
        MAYBE("Maybe."),
        AGAIN("Ask again.")
    }
    val answers = Answer.values()
    val rand = Random()
    fun genAnswer ():String {
        val n = rand.nextInt(3)+1
//        return Answer[answers[n]].text
    }
}
Run Code Online (Sandbox Code Playgroud)

我想随机选择一个枚举元素并返回其text属性,但是看来我无法使用其值来检索该元素。

我认为该信息已足够。

小智 15

Answer.values().random()将在 Kotlin 中为您完成这项工作。


Grz*_*rek 8

您可以通过执行以下操作获得随机枚举值:

val randomAnswer = Answer.values().toList().shuffled().first().text
Run Code Online (Sandbox Code Playgroud)

请记住使用公开text属性val。现在,它只是一个构造函数参数:

enum class Answer(val text: String)
Run Code Online (Sandbox Code Playgroud)

  • 注意:实际上,这并不是最佳的解决方案性能,因为它分配了一个单独的列表并处理了原始数组的所有项目,如果您只需要一个随机项目,则不需要这样做。不要在对性能有要求的代码中使用它。 (3认同)