我有多個整數串列。
val firstList: ArrayList<Int> = arrayListOf(1, 1, 1, 2, 3, 4)
val secondList: ArrayList<Int> = arrayListOf(1, 4, 5, 6, 6, 6, 7, 8)
val thirdList: ArrayList<Int> = arrayListOf(1, 6, 9)
...
我只需要在其他串列中洗掉重復項,而不是在串列本身中。
結果應該是:
[1,1,1,2,3,4,5,6,6,6,7,8,9]
在 Kotlin 中這樣做的最佳方法是什么?
uj5u.com熱心網友回復:
我們可以用.filterand過濾額外的串列.contains,然后將結果添加到firstList. 不確定這是否是最有效的方法,但它應該有效。
val firstList: ArrayList<Int> = arrayListOf(1, 1, 1, 2, 3, 4)
val secondList: ArrayList<Int> = arrayListOf(1, 4, 5, 6, 6, 6, 7, 8)
val thirdList: ArrayList<Int> = arrayListOf(1, 6, 9)
firstList = secondList.filterNot { firstList.contains(it) }
firstList = thirdList.filterNot { firstList.contains(it) }
firstList.sort() //not sure if you want the firstList to be sorted or not
你也可以把它做成一個擴展函式,這樣呼叫起來就更容易了。
fun <T> MutableCollection<T>.addOtherNoDuplicates(vararg others: Iterable<T>){
others.forEach {other ->
this = other.filterNot { this.contains(it) }
}
}
然后呼叫將是:
firstList.addOtherNoDuplicates(secondList, thirdList) //add as many as you want
firstList.sort()
如果您只想將它??用于 ArrayList,那么您可以替換MutableCollection<T>withArrayList<T>并sort()直接在函式本身中使用。
uj5u.com熱心網友回復:
如果這些串列很長,您可以在旁邊使用 MutableSet 來有效地避免添加不需要的值。
val input = listOf(firstList, secondList, thirdList)
val allValues = mutableSetOf<Int>()
val result = mutableListOf<Int>()
for (list in input) {
val newValues = list.filterNot { it in allValues }
result.addAll(newValues)
allValues.addAll(newValues)
}
println(result)
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/407418.html
標籤:
