从多维数组

时间:2018-05-10 14:48:38

标签: arrays swift value-type equatable

我编写了以下扩展名以从我的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

1 个答案:

答案 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()方法(反过来会查找重复项,除非它找到另一个数组,然后它会再次调用自己)。