【问题标题】:How to filter a list by using the ids of another list?如何使用另一个列表的 id 过滤列表?
【发布时间】:2021-02-10 03:26:13
【问题描述】:

我有一个ids 的列表。我想过滤我的列表,只保留该列表中与 id 匹配的值。

fun filterHelper(ids: List<Int>, list: List<People>) {
     list.filter { ids.contains(it.id) }
}

但这是非常低效的。它本质上是遍历列表 O(n^2)。 Kotlin 会让我做得更好吗?

【问题讨论】:

    标签: kotlin


    【解决方案1】:

    我最近向similar question 询问了关于切片地图的问题。答案是没有好的内置函数,但是您可以通过使用Set 而不是List 来解决您的 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()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-06
      • 2015-11-07
      • 2021-09-13
      • 1970-01-01
      • 2022-11-25
      • 1970-01-01
      相关资源
      最近更新 更多