首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Swift 3中的排序字典

Swift 3中的排序字典
EN

Stack Overflow用户
提问于 2016-07-16 14:22:26
回答 2查看 7.9K关注 0票数 6

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

我试图使用以下代码根据字典的值对字典进行排序,这些值是浮动的:

代码语言:javascript
复制
var sortedDict = unsortedDict.allValues.sorted({ $0 < $1 }).flatMap({ floatedlotterydictionary[$0] })

基本上,我想要这本未分类的字典..。

代码语言:javascript
复制
{
a = "1.7";
b = "0.08";
c = "1.4";
}

...to变成了这个分类字典..。

代码语言:javascript
复制
{
b = "0.08";
c = "1.4";
a = "1.7";
}

但是,使用上述代码行将返回$0 < $1部件的错误“参数类型anyobject不符合$0 < $1类型”。那么,如何根据Swift 3中的值对词典进行排序呢?

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

我在Xcode 8 beta 1中使用Swift 3

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-07-16 14:59:09

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

docs中,sorted采用闭包,它允许我们同时访问键和值,并将其视为一个元素,从而对字典进行排序。

代码语言:javascript
复制
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)。

票数 7
EN

Stack Overflow用户

发布于 2016-09-18 16:10:15

也有这样的方法:

代码语言:javascript
复制
let k = ["a" : 1.7, "b" : 0.08, "c" : 1.4]

print(k.flatMap({$0}).sort { $0.0.1 < $0.1.1 })
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38412116

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档