删除结构数组中的重复项

时间:2017-02-17 17:35:36

标签: swift

我正在过滤一个数组,该数组可以有一个值,其中有多个同名模型,只有它们有不同的型号。

变量

var modelArray = [model]()

STRUCT

struct model {
    var modelName = String();
    var modelNumber = String();
    var manufacturer = String();
    var phiTypeCode = String();
    var phiTypeDesc = String();
}

过滤

var filteredArray = self.modelArray.filter { $0.manufacturer.range(of: manufacturerVar, options: .caseInsensitive) != nil }

这会产生正确的过滤数组,只是由于类似模型具有不同型号的可能性,我试图从filteredArray中删除重复项。 相当新的快速我没有太多的经验使结构可以使用建议的解决方案。

希望这更清楚

1 个答案:

答案 0 :(得分:4)

首先,我尝试在PlayGround中制作样本。

  1. 使您的模型model符合协议Equatable,如下所示:

    struct Car: Equatable {
    
        var modelName = String()
        var manufacturer = String()
    
        init(modelName: String, manufacturer: String) {
            self.modelName = modelName
            self.manufacturer = manufacturer
        }
    
        static func == (lhs: Car, rhs: Car) -> Bool {
            return lhs.modelName == rhs.modelName
        }
    }
    
  2. 在上面的代码中,我们假设modelName是您模型的主键。

    1. 现在创建一个枚举数据源的函数,并在逐个检查元素后返回一个新的数据源,如下所示:

      // returns unique array
      
      func unique(cars: [Car]) -> [Car] {
      
          var uniqueCars = [Car]()
      
          for car in cars {
              if !uniqueCars.contains(car) {
                  uniqueCars.append(car)
              }
          }
      
          return uniqueCars
      }
      
    2. 最后,您现在可以生成一个新的唯一数据源。

      示例:

      // Variable
      
      var cars = [Car]()
      
      // Adding data models to data source
      
      let car1 = Car(modelName: "Kia Picanto", manufacturer: "Kia")
      let car2 = Car(modelName: "Honda XX", manufacturer: "Honda")
      let car3 = Car(modelName: "Honda XX", manufacturer: "Honda")
      
      cars.append(car1)
      cars.append(car2)
      cars.append(car3)
      
      // Now contains only two elements.
      let uniqueCars = unique(cars: cars)