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

标签 ios arrays swift filter higher-order-functions

我的模型类如下:

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] 使用 filterma​​p,但是,我想知道如何为自定义对象数组实现高阶函数。

最佳答案

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/

相关文章:

iphone - 从 WiFi 转到 3G 时没有网络

ios - 使用自定义 URL 直接更新在 iOS 7.1.2 上不起作用

C++ 静态数组

swift - 如何在 Swift 闭包中弱捕获多个参数?

ios - 嵌套 UINavigationController 的最佳方法

html - 如何在不选择 IOS 画廊的情况下强制从相机上传文件?

ios - 向多个 subview Controller 发送消息的最佳方式

java - 如何检查数组的所有元素是否不等于某个值? (例如不为空)

java - java将所有数组元素重新初始化为零

Swift:let 未初始化,但 var 已初始化。为什么?