如何在 Kotlin 的一行中将一个值与其他几个值进行比较
How to compare a value to several other values in one line in Kotlin
在 Kotlin 中是否有更好的替代表达式:a == b || a == c
我正在寻找类似 a == b || c
或 a.equals(b, c)
的内容
您可以将when
用作
when(a){
b,c -> println("match") // match either b or c
else -> println("no match") // in case of no match
}
此外,您可以使用 in
,范围如
when(number){
100,200 -> println(" 100 or 200 ")
in 1..5 -> println("in range") // between 1 - 5
!in 6..10 -> println("not in range") // not between 6 - 10
else -> println("no match")
}
您还可以使用多个自定义 enum
值作为
// often used to represent API/process status etc
when(Status.ERROR){
in listOf(Status.ERROR, Status.EXCEPTION) -> println("Something when wrong")
else -> println("Success")
}
enum class Status{
SUCCESS, ERROR, EXCEPTION
}
您可以将值放在列表中并使用 any
:
listOf(b, c).any { it == a }
如果要比较的值很多,这将变得特别方便。
以防万一您也需要它:
a == b && a == c
将转换为 listOf(b, c).all { it == a }
我认为最简单的方法是使用 in
运算符:
a in listOf(b, c)
您可以在列表中添加任意数量的项目。
另一个选项(我个人更喜欢)是创建一个扩展函数:
fun Any.equalsAny(vararg values: Any): Boolean {
return this in values
}
用法示例:
val result1 = 20.equalsAny(10, 20, 30) // Returns true
val result2 = "ABC".equalsAny(10, 20, 30, 99 , 178) // Returns false
val result3 = "ABC".equalsAny("ABC", "XYD", "123") // Returns true
val result4 = "ABC".equalsAny("xxx", "XYD", "123") // Returns false
您甚至可以混合类型,而且效果很好:
val a = 1
val b = "10"
val c = true
val search = 999
val search2 = false
val result5 = search.equalsAny(a, b, c) // Returns false
val result6 = search2.equalsAny(a, b, c, 872, false) // Returns true
我定义了几个辅助函数:
inline fun <T> T.isAnyOf(a: T, b: T) = this == a || this == b
inline fun <T> T.isAnyOf(a: T, b: T, c: T) = this == a || this == b || this == c
inline fun <T> T.isNotAnyOf(a: T, b: T) = !isAnyOf(a, b)
inline fun <T> T.isNotAnyOf(a: T, b: T, c: T) = !isAnyOf(a, b, c)
可以这样使用:
if ("word".isAnyOf("list", "of", "words")) { ... }
在 Kotlin 中是否有更好的替代表达式:a == b || a == c
我正在寻找类似 a == b || c
或 a.equals(b, c)
您可以将when
用作
when(a){
b,c -> println("match") // match either b or c
else -> println("no match") // in case of no match
}
此外,您可以使用 in
,范围如
when(number){
100,200 -> println(" 100 or 200 ")
in 1..5 -> println("in range") // between 1 - 5
!in 6..10 -> println("not in range") // not between 6 - 10
else -> println("no match")
}
您还可以使用多个自定义 enum
值作为
// often used to represent API/process status etc
when(Status.ERROR){
in listOf(Status.ERROR, Status.EXCEPTION) -> println("Something when wrong")
else -> println("Success")
}
enum class Status{
SUCCESS, ERROR, EXCEPTION
}
您可以将值放在列表中并使用 any
:
listOf(b, c).any { it == a }
如果要比较的值很多,这将变得特别方便。
以防万一您也需要它:
a == b && a == c
将转换为 listOf(b, c).all { it == a }
我认为最简单的方法是使用 in
运算符:
a in listOf(b, c)
您可以在列表中添加任意数量的项目。
另一个选项(我个人更喜欢)是创建一个扩展函数:
fun Any.equalsAny(vararg values: Any): Boolean {
return this in values
}
用法示例:
val result1 = 20.equalsAny(10, 20, 30) // Returns true
val result2 = "ABC".equalsAny(10, 20, 30, 99 , 178) // Returns false
val result3 = "ABC".equalsAny("ABC", "XYD", "123") // Returns true
val result4 = "ABC".equalsAny("xxx", "XYD", "123") // Returns false
您甚至可以混合类型,而且效果很好:
val a = 1
val b = "10"
val c = true
val search = 999
val search2 = false
val result5 = search.equalsAny(a, b, c) // Returns false
val result6 = search2.equalsAny(a, b, c, 872, false) // Returns true
我定义了几个辅助函数:
inline fun <T> T.isAnyOf(a: T, b: T) = this == a || this == b
inline fun <T> T.isAnyOf(a: T, b: T, c: T) = this == a || this == b || this == c
inline fun <T> T.isNotAnyOf(a: T, b: T) = !isAnyOf(a, b)
inline fun <T> T.isNotAnyOf(a: T, b: T, c: T) = !isAnyOf(a, b, c)
可以这样使用:
if ("word".isAnyOf("list", "of", "words")) { ... }