簡體   English   中英

如何使用另一個列表的 id 過濾列表?

[英]How to filter a list by using the ids of another list?

我有一個ids列表。 我想過濾我的列表,只保留該列表中與 id 匹配的值。

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

但這是非常低效的。 它本質上是遍歷列表 O(n^2)。 Kotlin 讓我做得更好嗎?

我最近問了一個關於切片地圖的類似問題 答案是沒有好的內置 function,但是您可以通過使用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)
}

Output:

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

值得一提的是,如果您已經有一個列表,您可以輕松地轉換為一個集合:

list.toSet()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM