我有这本词典,是从网络服务获取的:
let json = try JSONSerialization.jsonObject(with: data!, options:.allowFragments) as! Dictionary<String, AnyObject>
现在我尝试按字母顺序对它们进行排序:
self.appDelegate.communityArray = json.sorted(by: {$0.0 < $1.0})
但我收到此错误:
Cannot assign value of type '[(key: String, value: AnyObject)]' to type 'Dictionary?'
我做错了什么?
这就是我定义communityArray的方式:
var communityArray: Dictionary<String, AnyObject>?
最佳答案
正如评论中提到的,字典(包含键值对的集合类型)根据定义是无序的,无法排序。
应用于字典的collection
的sorted
函数以字典为例
["foo" : 1, "bar" : false]
作为元组数组
[(key : "foo", value : 1), (key : "bar", value : false)]
并按键 (.0)
或值 (.1)
对它们进行排序(我怀疑按值 Any
排序会引发编译器错误)
发生此错误的原因是您无法将元组数组分配给声明为字典的变量。这几乎就是字面上的错误消息。
作为妥协,我建议将字典映射
到自定义结构(类似于元组,但更好处理)
struct Community {
let key : String
let value : Any
}
您的变量名称已经暗示您想要一个真实数组
var communityArray = [Community]()
let json = try JSONSerialization.jsonObject(with: data!) as! Dictionary<String, Any>
communityArray = json.map { Community(key: $0.0, value: $0.1 }.sorted { $0.key < $1.key }
关于swift - 按字母顺序对字典进行排序 无法将类型 '[(key: String, value: AnyObject)]' 的值分配给类型 'Dictionary<String, AnyObject>?',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57551344/