我有两个数组,我正在比较[Int]
let filter = strongAgainstArray.filter{weakAgainstArray.contains($0)}
Run Code Online (Sandbox Code Playgroud)
这将返回2个数组中的公共值数组.然后我想通过并从每个数组中删除这些值,我正在这样做
for item in filter {
for var i = 0; i < strongAgainstArray.count; i += 1 {
if item == strongAgainstArray[i] {
strongAgainstArray.removeAtIndex(i)
print("Removing a Strong against index \(item)")
}
}
for var i = 0; i < weakAgainstArray.count; i += 1 {
if item == weakAgainstArray[i] {
weakAgainstArray.removeAtIndex(i)
print("Removing a Weak against index \(item)")
}
}
}
Run Code Online (Sandbox Code Playgroud)
这工作正常,但我们可以说我的一个数组包含两个条目12作为示例.我如何只删除其中一个?目前,所有条目12都被完全删除.
编辑
我现在正在比较我的两个数组
let commonValues = Array(Set(strongAgainstArray).intersect(weakAgainstArray))
然后是commonValues每个数组中的那些
cleanStrongAgainstArray = Array(Set(strongAgainstArray).subtract(Set(commonValues)).sort())
cleanWeakAgainstArray = Array(Set(weakAgainstArray).subtract(Set(commonValues)).sort())
Run Code Online (Sandbox Code Playgroud)
这是一个更好的整体解决方案,但我仍然最终遇到了同样的问题,尽管与以前略有不同.
在操场上,例如......
let array = [7,7,9]
let test = Array(Set(array))
Run Code Online (Sandbox Code Playgroud)
测试回来了[7, 9],我需要保留额外的7.我该怎么做?
如果数组的顺序不重要,那么您可以使用Sets轻松实现整个解决方案:
let dirtyArray = [1,4,6,1,56,4,4,66,23,3,3,12]
let dirtyArray1 = [3,1,6,99,54]
let cleanArray = Array(Set(dirtyArray).union(Set(dirtyArray1)))
print (cleanArray)
Run Code Online (Sandbox Code Playgroud)
[12,54,23,4,6,66,99,56,1,3]