我正在过滤一个数组,该数组可以具有一个值,其中有多个具有相同名称的模型,只是它们具有不同的模型编号。
变数
var modelArray = [model]()
Run Code Online (Sandbox Code Playgroud)
结构
struct model {
var modelName = String();
var modelNumber = String();
var manufacturer = String();
var phiTypeCode = String();
var phiTypeDesc = String();
}
Run Code Online (Sandbox Code Playgroud)
过滤
var filteredArray = self.modelArray.filter { $0.manufacturer.range(of: manufacturerVar, options: .caseInsensitive) != nil }
Run Code Online (Sandbox Code Playgroud)
仅由于存在具有不同型号的相似型号的可能性,这会产生正确的过滤Array,我正尝试从中删除重复项filteredArray。相当新,我没有太多的经验可以使结构可哈希化以使用建议的解决方案。
希望这更清楚
首先,我尝试在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
}
}
Run Code Online (Sandbox Code Playgroud)在上面的代码中,我们假设the 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
}
Run Code Online (Sandbox Code Playgroud)最后,您现在具有生成新的唯一数据源的功能。
例:
// 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)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1327 次 |
| 最近记录: |