假设我有这个:
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
' order?
我当前的方法似乎效率极低:
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]!}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)