Kotlin 如何使用其他列表的ID筛选列表?

Kotlin 如何使用其他列表的ID筛选列表?,kotlin,Kotlin,我有一个ID的列表。我想筛选我的列表,只保留该列表中与id匹配的值 fun filterHelper(ids: List<Int>, list: List<People>) { list.filter { ids.contains(it.id) } } fun filterHelper(id:List,List:List){ list.filter{ids.contains(it.id)} } 但这是非常低效的。它本质上是遍历列表O(n^2)。Kotlin让

我有一个
ID的列表
。我想筛选我的列表,只保留该列表中与id匹配的值

fun filterHelper(ids: List<Int>, list: List<People>) {
     list.filter { ids.contains(it.id) }
}
fun filterHelper(id:List,List:List){
list.filter{ids.contains(it.id)}
}
但这是非常低效的。它本质上是遍历列表O(n^2)。Kotlin让我做得更好吗?

最近我问了一个关于地图切片的问题。答案是没有很好的内置函数,但是您可以通过为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)
}
输出:

[People(id=2), People(id=4)]

值得一提的是,如果您已经有一个列表,您可以轻松地转换为一个集合,其中包括:

list.toSet()
最近我问了一个关于切片地图的问题。答案是没有很好的内置函数,但是您可以通过为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)
}
输出:

[People(id=2), People(id=4)]

值得一提的是,如果您已经有一个列表,您可以轻松地转换为一个集合,其中包括:

list.toSet()