我有以下代码块,并希望使用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
}
答案 0 :(得分:4)
如果数组很小,并且您想将操作映射到每个索引:
您可以使用indexOfFirst
来确定满足您状况的最小索引。然后,您可以使用when
语句来决定要做什么。
when(nameArray.indexOfFirst{ it == name }) {
0 -> // do something
1 -> // do something else
//...
else -> // do something different
}
如果您可能想对多个索引执行相同的操作,则可以使用逗号分隔的值。如果索引是连续的,则可以使用范围:
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
}
为了使用这种语法,最好先进行索引检索(如图所示)。
如果数组很大,而您真的只想检查特定元素:
when(name) {
nameArray[0] -> // do something
nameArray[1] -> // do something
nameArray[2] -> // do something
nameArray[3] -> // do something
else -> // other action
}
答案 1 :(得分:2)
您可以使用when
将其简化如下
when(name) {
nameArray[0] -> //statement
nameArray[1] -> //statement
nameArray[2] -> //statement
nameArray[3] -> //statement
else -> //statement
}
或者,如果您可以使用枚举代替下面的nameArray
enum class Names {
NAME_1, NAME_2, NAME_3
}
并拥有name
枚举类型的Names
,则可以如下使用when
子句,这是一种更简洁的方法,而且可读性更高
when(name) {
Names.NAME_1 -> //statement
Names.NAME_2 -> //statement
Names.NAME_3 -> //statement
}
答案 2 :(得分:1)
您可以使用更好更强大的Kotlin构造when
。
它与切换用例的构造类似,但是您也可以使用表达式,请查看here以了解更多信息。
针对您的示例,您可以编写:
when (name) {
nameArray[0] -> {
//The statement
}
nameArray[1] -> {
//The statement
}
nameArray[2] -> {
//The statement
}
nameArray[3] -> {
//The statement
}
else -> {
//Executes when conditions are not met
}
}
答案 3 :(得分:1)
也许我是在误解您想做的事情,但是在我看来,when语句使这一过程变得过于复杂。在您的原始代码中,您只想确定数组是否在0到3的任何索引中包含std::stack
值,并做出相应的响应。
name
答案 4 :(得分:0)
更简单的方法:迭代数组,而不是if
-else
数组的每个可能索引:
fun main(args: Array<String>) {
val nameArray: Array<String> = arrayOf("naam", "nombre", "name", "Name")
val name: String = "name";
for (i in 0..(nameArray.size - 1)) {
if (name == nameArray[i]) {
println("The statement should be executed on index " + i)
}
}
}
输出:
The statement should be executed on index 2