在 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 个元素时,它会变得 显着 变慢。它需要进行调整才能在更大的阵列上表现良好。
我的模型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 个元素时,它会变得 显着 变慢。它需要进行调整才能在更大的阵列上表现良好。