gpt4 book ai didi

Kotlin:一种检查列表是否包含另一个集合/列表值的优雅方法?

转载 作者:行者123 更新时间:2023-12-01 09:44:04 25 4
gpt4 key购买 nike

是否有一种优雅/惯用的方法来检查 Kotlin 中一个列表的元素是否包含在另一个列表中?

鉴于:

val listA = listOf("A", "B", "C")

我可以写表达式,例如:
listA.intersect(setOf("E", "C")).isNotEmpty()

或者:
listA.any { it in listOf("E","C") }

没关系,但我想知道是否有更流畅的表达方式(由于此代码已简化,实际代码更复杂)。

我的回退是使用自定义扩展功能,例如:
fun <T> List<T>.containsAny(vararg other : T) =
this.intersect(other.toSet()).isNotEmpty()

我只是想知道是否有更好的方法。

最佳答案

我同意路易斯的观点 setA.any { it in setB }看起来很可读,并且完全依赖于标准库函数。或者,您可以使用方法引用使其更加明确:

setA.any(setB::contains)

更进一步,您可以定义自己的扩展函数:
infix fun <T: Any> Set<T>.intersects(other: Set<T>) = any(other::contains)

然后你可以写:
if (setA intersects setB)

编辑:鉴于你更新的问题,我注意到这个扩展函数可以扩展到任何集合类型,或者使用你的可变参数方法:
infix fun <T: Any> Collection<T>.intersects(other: Collection<T>) = any(other::contains)
fun <T: Any> Collection<T>.intersects(vararg others: T) = any(other::contains)

因此,您仍然可以执行以下操作:
if (myList intersects setOf("1", "2", "3"))

或者
if (myList.intersects("1", "2", "3"))

关于Kotlin:一种检查列表是否包含另一个集合/列表值的优雅方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52955587/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com