gpt4 book ai didi

ios - 使用 Swift 对两个数组排序

转载 作者:可可西里 更新时间:2023-11-01 01:06:23 25 4
gpt4 key购买 nike

问题如下:

我有两个数组,一个包含对象,第二个包含按 ID 排序的 CoreData 实体:

var objects  = [["id":5],["id":1],["id":3]]
var entities = [["id":1],["id":3],["id":5]]

我需要按照与对象相同的顺序对实体进行排序。* 实体目标尚未保存

我可以通过一个循环又一个循环来创建第三个数组,但是它很慢并且使用的内存比它应该的多(我的数组有时会处理超过 100 个实体)

let count = objects.count
var finalArray = []()
for i in 0..<count {
let id = objects[i].id
for k in 0..<count {
if entities[k].id == id {
finalArray += [entities[k]]
break
}
}
}

上面的代码确实有效,但它的味道还不够好。关于如何使用内置 Swift 更优化的解决方案有什么建议吗?

最佳答案

这不是一个真正的 Swift 问题。是一道算法题。您可以用任何语言以同样的方式进行操作。

首先,构建一个从 id 到 entity 的映射。然后,使用 map 高效地查找实体。

var entityForId = [Int:MyEntity]()
for entity in entities {
entityForId[entity.id] = entity
}

var finalArray = [MyEntity]()
for object in objects {
if let entity = entityForId[object.id] {
finalArray.append(entity)
}
}

您可以用一行替换第二个循环:

var finalArray = objects.flatMap({ entityForId[$0.id] })

我发现使用 flatMap 使代码在这里更清晰,但如果您不熟悉它,您可能更喜欢显式循环。

关于ios - 使用 Swift 对两个数组排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28347058/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com