首页 文章

删除结构数组中的重复项

提问于
浏览
-1

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

Variables

var modelArray = [model]()

Struct

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

Filter

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

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

希望这更清楚

1 回答

  • 2

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

    • 使您的模型 model 符合protocal 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
        }
    }
    

    在上面的代码中,我们假设 modelName 是模型的主键 .

    • 现在创建一个枚举数据源的函数,并在逐个检查元素后返回一个新的数据源,如下所示:
    // returns unique array
    
    func unique(cars: [Car]) -> [Car] {
    
        var uniqueCars = [Car]()
    
        for car in cars {
            if !uniqueCars.contains(car) {
                uniqueCars.append(car)
            }
        }
    
        return uniqueCars
    }
    

    最后,您现在可以生成新的唯一数据源 .

    例:

    // 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)
    

相关问题