如何使用 Kotlin 将嵌套的 if-else 更改为 when 语句?

sad*_*han 3 kotlin

我有以下代码块,并希望使用 Kotlin 减少它。我怎样才能做到这一点?

if (name == nameArray[0]) {
    // The statement
} else if(name == nameArray[1]) {
    // The statement
} else if(name == nameArray[2]) {
    // The statement
} else if(name == nameArray[3]) {
    // The statement
} else {
    // The statement
}
Run Code Online (Sandbox Code Playgroud)

Wil*_*zel 5

如果数组很小并且您想将操作映射到每个索引:

您可以indexOfFirst用来确定适合您状况的最小指数。然后,您可以使用when语句来决定要做什么。

when(nameArray.indexOfFirst{ it == name }) {
    0 -> // do something
    1 -> // do something else
    //...
    else -> // do something different
}
Run Code Online (Sandbox Code Playgroud)

如果您可能想对多个索引做同样的事情,您可以使用逗号分隔值。如果索引是连续的,您可以使用范围:

when(nameArray.indexOfFirst{ it == name }) {
    0 -> // do something
    1, 2 -> // do the same thing for 1 and 2
    in 3..6 -> // do the same thing for 3, 4, 5 and 6
    //...
    else -> // do something different
}
Run Code Online (Sandbox Code Playgroud)

为了使用这种语法,最好先进行索引检索(如图所示)。

如果数组很大并且您真的只想检查特定元素:

when(name) {
    nameArray[0] -> // do something
    nameArray[1] -> // do something
    nameArray[2] -> // do something
    nameArray[3] -> // do something
    else -> // other action
}
Run Code Online (Sandbox Code Playgroud)