我有这个字典,我从一个Web服务获得:
let json = try JSONSerialization.jsonObject(with: data!, options:.allowFragments) as! Dictionary<String, AnyObject>
Run Code Online (Sandbox Code Playgroud)
现在我试图按字母顺序对它们进行排序:
self.appDelegate.communityArray = json.sorted(by: {$0.0 < $1.0})
Run Code Online (Sandbox Code Playgroud)
但我得到这个错误:
无法指定类型'[(key:String,value:AnyObject)]'的值来键入'Dictionary?'
我究竟做错了什么?
这就是我定义communityArray的方式:
var communityArray: Dictionary<String, AnyObject>?
Run Code Online (Sandbox Code Playgroud)
正如评论中提到的,字典 \xe2\x80\x93 包含键值对 \xe2\x80\x93 的集合类型根据定义是无序的,无法排序。
\n\nsorted应用于字典的函数以collection字典为例
["foo" : 1, "bar" : false]\nRun Code Online (Sandbox Code Playgroud)\n\n作为元组数组
\n\n[(key : "foo", value : 1), (key : "bar", value : false)]\nRun Code Online (Sandbox Code Playgroud)\n\n并按键(.0)或值对它们进行排序(.1)(我怀疑按值排序Any会引发编译器错误)
发生错误的原因是您无法将元组数组分配给声明为字典的变量。这几乎就是字面上的错误消息。
\n\n作为妥协,我建议map字典使用自定义结构(类似于元组,但更好处理)
struct Community {\n let key : String\n let value : Any\n}\nRun Code Online (Sandbox Code Playgroud)\n\n您的变量名称已经暗示您想要一个真正的数组
\n\nvar communityArray = [Community]()\n\nlet json = try JSONSerialization.jsonObject(with: data!) as! Dictionary<String, Any>\ncommunityArray = json.map { Community(key: $0.0, value: $0.1 }.sorted { $0.key < $1.key } \nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
458 次 |
| 最近记录: |