我的模型类如下:
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] 使用 filter 和 map,但是,我想知道如何为自定义对象数组实现高阶函数。
最佳答案
for (index, job) in idsJobModel.enumerated() {
if let match = arrFiltetered.first( where: {job.id == $0.id} ) {
idsJobModel[index] = match
}
}
或者如果您更喜欢使用 map :
idsJobModel = idsJobModel.map {
let myID = $0.id
if let match = arrFiltetered.first( where: {myID == $0.id} ) {
return match
} else {
return $0
}
}
上面代码的任一版本都将具有 O(n²)
性能,因此当您的数组大于 ≈30 个元素时,它会显着变慢。它需要进行调整才能在更大的阵列上表现良好。
关于ios - 在 Swift 中使用属性和 Map 过滤自定义对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59080294/