从两个数组中,使用Kotlin获取任一数组中的所有元素,但不能同时获取所有元素

时间:2018-06-25 10:13:46

标签: arrays kotlin

我有两个数组,例如[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)
}

3 个答案:

答案 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())