[英]Filter array of custom objects with an attribute and Map in Swift
My model class is as below:我的模型类如下:
struct Job: Decodable, Equatable, Hashable {
var id: Int?
var status: String?
var priority: String?
}
I have 2 array of objects(job) as:我有 2 个对象数组(工作)为:
var jobModel = [Job]()
var filteredJobModel = [Job]()
Case : jobModel
has 5 elements.案例:
jobModel
有 5 个元素。 filteredJobModel
has 2 elements( subset of jobModel
). filteredJobModel
有 2 个元素( jobModel
的子集)。 In filteredJobModel
, the value for status
for both objects has been changed by search
operation.在
filteredJobModel
中,两个对象的status
值已被search
操作更改。 I would like to update the jobModel
back with filteredJobModel
, where the object matches the id
attribute.我想用
filteredJobModel
更新jobModel
,其中对象与id
属性匹配。
Is there any way by which I can achieve this case?有什么办法可以实现这种情况吗? I would have been able to use filter & map for [String], but, I would like to know how to implement higher order functions for array of custom objects.
我本来可以为 [String] 使用过滤器和映射,但是,我想知道如何为自定义对象数组实现高阶函数。
for (index, job) in idsJobModel.enumerated() {
if let match = arrFiltetered.first( where: {job.id == $0.id} ) {
idsJobModel[index] = match
}
}
Or if you prefer using map:或者,如果您更喜欢使用地图:
idsJobModel = idsJobModel.map {
let myID = $0.id
if let match = arrFiltetered.first( where: {myID == $0.id} ) {
return match
} else {
return $0
}
}
Either version of the code above will have O(n²)
performance, so it will get dramatically slower as your arrays get larger than ≈30 elements.上面代码的任一版本都将具有
O(n²)
性能,因此当您的数组大于 ≈30 个元素时,它会变得非常慢。 It would need to be tweaked to perform well on larger arrays.它需要进行调整才能在更大的阵列上表现良好。
you can do like this 你可以这样
let idsJobModel = filteredJobModel.map { $0.id }
let arrFiltetered = jobModel.filter { !idsJobModel.contains($0.id) }
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.