我有一份清单ids
。我想过滤我的列表,只保留该列表中与 id 匹配的值。
fun filterHelper(ids: List<Int>, list: List<People>) {
list.filter { ids.contains(it.id) }
}
Run Code Online (Sandbox Code Playgroud)
但这是非常低效的。它本质上是遍历列表 O(n^2)。Kotlin 能让我做得更好吗?
我最近问了一个关于切片地图的类似问题。答案是没有好的内置函数,但您可以通过使用 aSet
代替 aList
作为您的 id 来解决这个问题,这样您的比较查找时间为 O(1),因此总共为 O(n)。
data class People(val id: Int)
fun main() {
val people = listOf(People(1), People(2), People(3), People(4))
val ids = setOf(2, 4)
val filtered = people.filter { it.id in ids }
println(filtered)
}
Run Code Online (Sandbox Code Playgroud)
输出:
[People(id=2), People(id=4)]
Run Code Online (Sandbox Code Playgroud)
值得一提的是,如果您已经有一个列表,则可以使用以下命令轻松转换为集合:
list.toSet()
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
953 次 |
最近记录: |