使用 Swift 对两个数组进行排序
Posted
技术标签:
【中文标题】使用 Swift 对两个数组进行排序【英文标题】:Order two arrays using Swift 【发布时间】:2015-02-05 14:53:24 【问题描述】:问题如下:
我有两个数组,一个包含对象,第二个包含按 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 更优化的解决方案?
【问题讨论】:
【参考方案1】:这不是一个真正的 Swift 问题。这是一道算法题。你可以用任何语言做同样的事情。
首先,构建一个从 id 到 entity 的映射。然后,使用地图高效地查找实体。
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
使这里的代码更清晰,但如果你不熟悉它,你可能更喜欢显式循环。
【讨论】:
谢谢你,Rob,现在周期少了!确实是一个算法问题,我希望在 Swift 上构建“排序比较”,但您的解决方案仍然使它足够优化。以上是关于使用 Swift 对两个数组进行排序的主要内容,如果未能解决你的问题,请参考以下文章