在 Swift 中过滤具有属性和映射的自定义对象数组

Filter array of custom objects with an attribute and Map in Swift

我的模型class如下:

struct Job: Decodable, Equatable, Hashable {
   var id: Int?
   var status: String?
   var priority: String?
}

我有 2 个对象数组(工作):

 var jobModel = [Job]()
 var filteredJobModel = [Job]()

Case : 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 == [=10=].id} ) {
     idsJobModel[index] = match
   }
}

或者如果您更喜欢使用地图:

idsJobModel = idsJobModel.map {
    let myID = [=11=].id
    if let match = arrFiltetered.first( where: {myID == [=11=].id} ) {
        return match
    } else {
        return [=11=]
    }
}

以上代码的任一版本都将具有 O(n²) 性能,因此当您的数组大于 ≈30 个元素时,它会变得 显着 变慢。它需要进行调整才能在更大的阵列上表现良好。