我正在过滤一个数组,该数组可以有一个值,其中有多个同名模型,只有它们有不同的型号。
变量
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
中删除重复项。
相当新的快速我没有太多的经验使结构可以使用建议的解决方案。
希望这更清楚
答案 0 :(得分:4)
首先,我尝试在PlayGround中制作样本。
使您的模型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
}
}
在上面的代码中,我们假设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)