Swift 比较两个列表以了解';她失踪了

Swift 比较两个列表以了解';她失踪了,swift,Swift,如果我有两个列表,例如list1和list2,我如何搜索list1以查看是否有任何元素不在list2中,然后将其附加到list2。以下是两个列表的示例: let list1 = ["James","John","fat","cart"] var list2 = ["James","fat","bobby"] 因此,在算法列表2之后: ["James","fat","bobby","John,"cart"] 你可以做一行编码 let list1 = ["James","John","fat",

如果我有两个列表,例如list1和list2,我如何搜索list1以查看是否有任何元素不在list2中,然后
将其附加到list2
。以下是两个列表的示例:

let list1 = ["James","John","fat","cart"]
var list2 = ["James","fat","bobby"]
因此,在算法列表2之后:

["James","fat","bobby","John,"cart"]

你可以做一行编码

let list1 = ["James","John","fat","cart"]
var list2 = ["James","fat","bobby"]

list2.append(contentsOf: list1.filter{!list2.contains($0)})
print("\list2")

//output
["James", "fat", "bobby", "John", "cart"]

list1.forEach({ !list2.contains($0) ? list2.append($0) : nil })
list2.append(contentsOf: Set(list1).subtracting(Set(list2)))

list1.forEach({ !list2.contains($0) ? list2.append($0) : nil })
list2.append(contentsOf: Set(list1).subtracting(Set(list2)))

使用
foreach
循环遍历
list1
中的项目。如果
list2
不包含项目,则将其附加到
list2
*

您需要像这样使用
Set

let list1 = ["James","John","fat","cart"]
let list2 = ["James","fat","bobby"]

let final = Array(Set([list1, list2].flatMap({$0})))


到目前为止,大多数答案在大型阵列上的性能都很差

Array.contains(:)
方法具有
O(n)
性能,这意味着组合两个数组将具有
O(n•m)
性能(其中
n
是一个数组中的项数,
m
是另一个数组中的项数。)这意味着随着阵列大小的增加,性能将呈指数级下降

如果你只需要处理少数项目,这并不重要。但是,如果数组中有>=数百个项目,时间性能将变差

更好地使用集合:

let list1 = ["James","John","fat","cart"]
var list2 = ["James","fat","bobby"]

list2 = Array(Set(list1).union(Set(list2)))

print(Set([list1, list2]))
print(list2)
集合使用哈希进行包含/唯一性测试,该测试在≈ 恒定时间

Jorgandar的答案也应该有很好的时间性能,但我的答案更简单,而且(我认为)更容易理解

我只是将每个数组转换成一个
集合
,将它们与
集合.union(:)
组合,然后将结果转换回集合


如果保留原始顺序很重要,那么可以为每个数组构建集合以进行唯一性测试,然后使用集合在其中一个数组中循环,以确定是否需要将每个项添加到另一个数组中。这会稍微复杂一点,但应该给出一个答案≈<代码>O(n)性能保留数组顺序。

的重复?可能的重复显示您已经尝试过的代码。我们不为您编写代码。您应该将哪个答案适合您标记为已接受。。