Swift 比较两个列表以了解';她失踪了
如果我有两个列表,例如list1和list2,我如何搜索list1以查看是否有任何元素不在list2中,然后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",
将其附加到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)性能和保留数组顺序。的重复?可能的重复显示您已经尝试过的代码。我们不为您编写代码。您应该将哪个答案适合您标记为已接受。。