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

时间:2018-05-29 10:42:59

标签: 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
    }
}

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

我认为信息足够了。

5 个答案:

答案 0 :(得分:4)

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

DELETE FROM Raw_data
            WHERE NOT EXISTS (SELECT *
                                     CoCode
                                     WHERE CoCode.id = Raw_data.code)

请务必使用val randomAnswer = Answer.values().toList().shuffled().first().text 公开text属性。现在,它只是一个构造函数参数:

val

答案 1 :(得分:0)

当你在param的构造函数中编写val / var时,它会在类中声明一个属性。如果不编写它,它只是传递给主构造函数的参数。所以只需将val添加到构造函数param文本中,这将使其成为具有getter的属性,并且上面的程序将起作用..

import java.util.*

class Answers {
    enum class Answer(val text: String) {
        YES("Yes."),
        No("No."),
        MAYBE("Maybe."),
        AGAIN("Ask again.")
    }
    val answers: Array<Answer> = Answer.values()
    val rand = Random()

    fun genAnswer ():String {
        val n = rand.nextInt(3)+1
        return answers[n].text
    }
}

fun main(String: Array<String>) {
    print(Answers().genAnswer())
}

答案 2 :(得分:0)

我将这种通用函数用于任何类型的枚举

/**
 * return random enum value of enum class T
 */
inline fun <reified T : Enum<T>> randomEnum(): T {
    val enumValues: Array<T> = enumValues()
    return enumValues[(0 until enumValues.size).random()]
}

/**
 * return random Int from start to end of range
 */
fun IntRange.random(): Int =
    Random().nextInt((endInclusive + 1) - start) + start

答案 3 :(得分:0)

我有一个包含语言值的 Enum SupportedLocale

我分两步完成

获取枚举值列表:

  val languages: Array<SupportedLocale> = SupportedLocale.values()

现在使用纵坐标位置选择随机值

 val randomLocale = languages[Random().nextInt(languages.size)]

答案 4 :(得分:0)

Answer.values().random() 应该为 kotlin 做这项工作。