在 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.value
和 b.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 })
尝试对 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.value
和 b.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 })