我在Swift 3中排序字典数组。Swift 3,排序字典数组
在斯威夫特2,我会做这种方式,它工作得很好:
var dicArray = [Dictionary<String, String>()]
let dic1 = ["last": "Smith", "first": "Robert"]
dicArray.append(dic1)
let dic2 = ["last": "Adams", "first": "Bill"]
dicArray.append(dic2)
let sortedArray = dicArray.sort { ($0["last"] as? String) < ($1["last"] as? String) }
转换相同的代码来斯威夫特3已经并不顺利。引导我到这(通过迂回路线)系统:
let sortedArray = dicArray.sorted { ($0["last"]! as String) < ($1["last"]! as String) }
但应用老是死机,并出现错误,它发现零而展开的可选值。 ?!
敲我的头靠在桌子太久,把S和S在每一个可以想象的组合后,我使出老办法来完成这项工作:
let sortedArray = (dicArray as NSArray).sortedArray(using: [NSSortDescriptor(key: "last", ascending: true)]) as! [[String:AnyObject]]
这工作,我一起前进,但它不是非常Swifty,是吗?
这一切都出错了?我怎样才能使纯Swift排序功能在这样的情况下工作?
如果你有一组静态键,你肯定应该使用一个结构而不是字典。 – Alexander
正如@亚历山大写道的,使用一个结构:如果关键字不是静态的,上面的排序是非常脆弱的w.r.t.运行时安全性,并且应该验证字典数组中的所有字典确实包含关键“最后”,例如,检查'dicArray.contains(其中:{!$ 0.keys.contains(“last”)})'不是'true'。如果你首先加入了这样一名警卫,那么你会发现空的额外字典,因为这会违反输入验证。 – dfri