繁体   English   中英

在 Swift 中使用属性和 Map 过滤自定义对象数组

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM