iOS Swift 过滤器和生成模型需要太多时间

标签 ios arrays swift algorithm

我有 3 个模型和各自的数组

struct A {
    var id: String
    var bId: String
    var cId: String
}

struct B {
    var id: String
}

struct C {
    var id: String
}


let aList: [A] = [.......] // 100 elements

let bList: [B] = [.......] // 200 elements

let cList: [C] = [.......] // 300 elements

现在我需要结构 'FilterModel' 的对象数组,它将通过迭代 'bList' 和 'cList' 进行过滤strong>aList'

struct FilterModel {

    var objA: A
    var objB: B?
    var objC: C?

    init(objA: A,
         objB: B? = nil,
         objC: C? = nil) {

         self.objA = objA
         self.objB = objB
         self.objC = objC
    }
}

So far i have tried like this


var filterModels: [FilterModel] = []

for aModel in aList {

    let filterBModel = bList.filter { $0.id == aModel.bId }.first
    let filterCModel = cList.filter { $0.id == aModel.cId }.first

    let model =  FilterModel(objA: aModel,
                             objB: filterBModel,
                             objC: filterCModel)

    filterModels.append(model)
}

时间太长,有什么优化或者更好的办法吗?

最佳答案

由于 aList 的每次迭代都必须迭代两个列表,因此复杂性并不好。相反,首先生成索引:

var bIndex: [String: B] = [:]
bList.forEach {
   bIndex[$0.id] = $0
} 

var cIndex: [String: C] = [:]
cList.forEach {
   cIndex[$0.id] = $0
} 

let filterModels: [FilterModel] = aList.map { aModel in
   return FilterModel(
      objA: aModel,
      objB: bIndex[aModel.bId],
      objC: cIndex[aModel.cId]
   )
}

关于iOS Swift 过滤器和生成模型需要太多时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51553976/

相关文章:

ios加载不会导致动画卡顿

arrays - PHP - 在数组中的第 70 个变量后丢失

javascript - 在数组json中的单个对象中转换多个相同的键对象

Swift 3 嵌套字典额外括号

ios - 保存最后一个 datePicker 选择

ios - 如何在未运行状态下在 iOS 上获取有关网络更改的通知

ios - 如何重置 UITextView 高度

ios - 为什么 touchesbegan : never gets called on a UIView after UIPinchGestureRecognizer is used?

ios - 原型(prototype)单元中的约束

javascript - 将 Firebase 元素映射为数组