在Kotlin中如何判断数组包含任一指定值?求惯用实现方式
Kotlin中判断数组是否包含多值的惯用写法
嘿,这问题问到点子上了!在Kotlin里,要判断数组是否包含多个目标值中的任意一个,除了链式的||判断,最地道、符合惯用风格的写法是借助标准库的any()高阶函数配合集合操作,具体有两种常用方式:
方式一:借助目标集合的contains方法
val arr = intArrayOf(1, 2, 3) val targets = setOf(2, 3) if (arr.any(targets::contains)) { println("in list") }
方式二:内嵌集合判断(更紧凑)
val arr = intArrayOf(1, 2, 3) if (arr.any { it in setOf(2, 3) }) { println("in list") }
为什么说这是惯用风格?
- 语义清晰:
any()函数的作用就是判断集合/数组中是否存在满足条件的元素,读起来就像“数组里有没有任意一个元素在目标集合里”,非常直观。 - 扩展性强:如果后续要增加更多目标值,只需要在
setOf()里添加元素就行,不像链式||那样要不断追加判断,维护起来更方便。 - 效率更优:用
setOf()存储目标值,其contains操作是O(1)时间复杂度,比用列表更高效,尤其是目标值数量较多时。
当然还有一种交集判断的方式:
if ((arr.toSet() intersect setOf(2, 3)).isNotEmpty()) { println("in list") }
但这种方式需要先把数组转成集合,会额外遍历一次数组,性能上不如any()直接遍历判断,所以除非你本来就需要用到交集结果,否则优先选前面两种any()的写法。
内容的提问来源于stack exchange,提问作者ADev
相关产品推荐
相关产品推荐

