我有 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/