[英]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.