[英]Filter array of custom objects with an attribute and Map in Swift
我的模型类如下:
struct Job: Decodable, Equatable, Hashable {
var id: Int?
var status: String?
var priority: String?
}
我有 2 个对象数组(工作)为:
var jobModel = [Job]()
var filteredJobModel = [Job]()
案例: jobModel
有 5 个元素。 filteredJobModel
有 2 个元素( jobModel
的子集)。 在filteredJobModel
中,两个对象的status
值已被search
操作更改。 我想用filteredJobModel
更新jobModel
,其中对象与id
属性匹配。
有什么办法可以实现这种情况吗? 我本来可以为 [String] 使用过滤器和映射,但是,我想知道如何为自定义对象数组实现高阶函数。
for (index, job) in idsJobModel.enumerated() {
if let match = arrFiltetered.first( where: {job.id == $0.id} ) {
idsJobModel[index] = match
}
}
或者,如果您更喜欢使用地图:
idsJobModel = idsJobModel.map {
let myID = $0.id
if let match = arrFiltetered.first( where: {myID == $0.id} ) {
return match
} else {
return $0
}
}
上面代码的任一版本都将具有O(n²)
性能,因此当您的数组大于 ≈30 个元素时,它会变得非常慢。 它需要进行调整才能在更大的阵列上表现良好。
你可以这样
let idsJobModel = filteredJobModel.map { $0.id }
let arrFiltetered = jobModel.filter { !idsJobModel.contains($0.id) }
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.