我有两个数组,例如[1, 2, 3, 4]
和[5, 3, 2, 1]
。
如何获取所有位于两个数组中但不是同时位于两个数组中的元素? ([4, 5]
)
到目前为止,这是我的代码,它可以正常工作,但是我认为必须有更好的方法...
fun main(args: Array<String>) {
val a = arrayOf(1, 2, 3, 4)
val b = arrayOf(5, 3, 1, 2)
val list = arrayListOf<Int>()
for (item in a) {
if(item !in b){
list.add(item)
}
}
for (item in b) {
if(item !in a){
list.add(item)
}
}
print(list)
}
答案 0 :(得分:2)
如果将数组转换为sets,则可以执行以下操作以获取析取并集,前提是您无需保留重复的元素:
val a = arrayOf(1, 2, 3, 4)
val b = arrayOf(5, 3, 1, 2)
val aSet = a.toSet()
val bSet = b.toSet()
print((aSet - bSet).union(bSet - aSet)) // [4, 5]
答案 1 :(得分:1)
根据您当前拥有的资源,这是一项快速的改进:
val list = a.filter { it !in b } + b.filter { it !in a }
但是为了获得更好的性能,引入在其中进行查找的集合是一个好主意:
val aSet = a.toSet()
val bSet = b.toSet()
val list = a.filter { it !in bSet } + b.filter { it !in aSet }
答案 2 :(得分:1)
您要查找的是两个减操作:
a.subtract(b.toSet()) + b.subtract(a.toSet())