Swift比较数组,有人知道如何解决它吗?

py49o6xq  于 2022-11-28  发布在  Swift
关注(0)|答案(2)|浏览(181)

有人能告诉我如何解决这个问题吗?我有两个数组,数组1改变值,数组2必须与第一个同步,但不丢失值的位置。我已经尝试了difference(from:),但它重新排序数组2的值。在这里,因为它应该是,非常感谢您的帮助。

let array1 = ["01", "06", "17", "22", "33", "45", "04"]
var array2 = ["04", "17", "22", "10", "01", "34"]

//
...
// Result
var array2 = ["04", "17", "22", "01", "06", "33", "45"]

数组2中值的顺序必须保持不变,删除数组1中缺少的值,并将数组1中缺少的值添加到数组2的末尾。

mkshixfv

mkshixfv1#

天真的解决方案:
1.将array1复制到临时变量temp
1.以相反顺序循环temp的索引。如果temp中的值存在于array2中,则将其移除。
1.将temp附加到数组2。
对于大型数组来说,这会有很差的时间性能(大约是O(n^2),或者更确切地说是O(array1.count*array2.count)),因为数组contains()的函数是O(n)。可以通过使用一个集合来跟踪array2中的项来加速它。

cgh8pdjw

cgh8pdjw2#

这是我能得到的最好的解决方案😉

let array1 = ["01", "06", "17", "22", "33", "45", "04"]
var array2 = ["04", "17", "22", "10", "01", "34"]

let remove = (array2.filter{!array1.contains($0)})
let append = (array1.filter{!array2.contains($0)})
for i in remove {
    array2 =  array2.filter {$0 != i}
}
array2.append(contentsOf: append)

print("array2:\(array2)")
// array2:["04", "17", "22", "01", "06", "33", "45"]

相关问题