在 Swift 3 中排序字典

Sorting dictionary in Swift 3

尝试对 Swift 3 中的 NSMutableDictionary 进行排序,来自 Swift 2 的代码不再适用于我(各种错误)。

我正在尝试使用以下代码按浮点数的值对字典进行排序:

var sortedDict = unsortedDict.allValues.sorted({ [=11=] <  }).flatMap({ floatedlotterydictionary[[=11=]] })

本质上,我想要这个未排序的字典...

{
a = "1.7";
b = "0.08";
c = "1.4";
}

...变成这个排序后的字典...

{
b = "0.08";
c = "1.4";
a = "1.7";
}

但是使用上面的那行代码 returns [=14=] < 部分的错误 "argument type anyobject does not conform with type NSCopying"。那么如何根据 Swift 3 中的值对字典进行排序?

(注意:该行代码部分来自 this answer。)

我在 Xcode 8 beta 1.

中使用 Swift 3

好的。普通字典上可用的集合方法仍然可用,但是对象的类型没有强制执行,这增加了不安全的继承。

docs 中,sorted 有一个闭包,让我们可以同时访问键和值,并将其视为一个元素,从而对字典进行排序。

let k: NSMutableDictionary = ["a" : 1.7, "b" : 0.08, "c" : 1.4]
print(k.sorted(isOrderedBefore: { (a, b) in (a.value as! Double) < (b.value as! Double) }))

需要转换,因为 a.valueb.value 的类型是 AnyObject。这适用于我的计算机,运行 Xcode 8.0 版测试版 (8S128d)。

还有这种方式:

let k = ["a" : 1.7, "b" : 0.08, "c" : 1.4]

print(k.flatMap({[=10=]}).sort { [=10=].0.1 < [=10=].1.1 })