假设我有这个:
struct Pet {
let name: String
}
let pets = [Pet(name: "Z"), Pet(name: "F"), Pet(name: "A"), Pet(name: "E")]
let petNames = ["E", "F", "Z", "A"]
我的预期输出是:
[Pet(name: "E"), Pet(name: "F"), Pet(name: "Z"), Pet(name: "A")]
如何pets
按照petNames
“顺序”进行有效排序?
我目前的方法似乎非常低效:
var sortedPets = [Pet]()
for n in petNames {
sortedPets.append(pets.first(where: { return $0.name == n })!)
}
我可以使用的任何功能方法?
效率不高,但从功能上解决了问题:
let pets2 = pets.sorted{petNames.index(of:$0.name)! < petNames.index(of:$1.name)!}
现在我们知道我们要做什么,这更复杂但更有效,因为字典查找速度很快:
var d = [String:Int]()
zip(petNames, 0..<petNames.count).forEach { d[$0.0] = $0.1 }
let pets2 = pets.sorted{d[$0.name]! < d[$1.name]!}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句