我编写了以下扩展名以从我的Array中删除重复项。
extension Array where Element : Equatable{
func removeDups() -> [Element]{
var result = [Element]()
for element in self{
if !result.contains(element){
result.append(element)
}
}
return result
}
}
线性阵列
let linearArr = [1,2,2,3]
linearArr.removeDups() // [1,2,3] works well!
多维数组
let multiDimArr : [[Int]] = [[1,2,3], [1,2,3], [1,2 ,4]]
multiDimArr.removeDups() // Error!
Type [Int]不符合Equatable
我读了here。答案说使用==
的数组比较应该有效。它不是一直都在工作:
作品
if (["1", "2"] == ["1", "2"]){
print("true")
}
不能工作
if ([1, 2] == [1, 2]){ // ERROR!
print("true")
}
模糊使用运算符' =='
这很特别。我可以比较String
的数组但不能比较Int
的数组。
我也看到this comment:
原因myArray1 == myArray2
NSObject
符合Equatable,调用-[equals:]
进行测试
不确定☝️评论是否仍然有效。
总结:
==
String
s的数组与Int
的数组我目前正在使用Swift 4.0.2
答案 0 :(得分:-2)
这是一个递归可以解决问题的地方。你考虑过递归吗?我打算用实际代码回答这个问题,但我不知道Swift的语法。所以,这里有一些伪麻烦:
function removeDupes() {
buffer = array;
foreach this->elements as key => element {
if(element is type array) {
this->elements[key] = element->removeDupes();
} else {
if(!this->contains(element)) {
buffer->add(element);
}
}
}
return buffer;
}
基本上,您要测试元素本身是否为数组。如果是,那么你想调用该数组的removeDupes()方法(反过来会查找重复项,除非它找到另一个数组,然后它会再次调用自己)。