我有这本词典,是从Web服务获得的:
let json = try JSONSerialization.jsonObject(with: data!, options:.allowFragments) as! Dictionary<String, AnyObject>
现在我正在尝试按字母顺序对它们进行排序,如下所示:
self.appDelegate.communityArray = json.sorted(by: {$0.0 < $1.0})
但是我得到这个错误:
无法将类型[[(key:String,value:AnyObject)]'的值分配给 输入“字典?”
我在做什么错了?
这就是我定义communityArray的方式:
var communityArray: Dictionary<String, AnyObject>?
答案 0 :(得分:1)
如评论中所述,字典-包含键-值对的集合类型-按定义无序,无法排序。
应用于字典的sorted
的{{1}}函数例如将字典视为
collection
作为元组数组
["foo" : 1, "bar" : false]
并按键[(key : "foo", value : 1), (key : "bar", value : false)]
或值(.0)
对其进行排序(我怀疑按值(.1)
进行排序会引发编译器错误)
发生错误是因为您不能为声明为 dictionary 的变量分配元组数组。那几乎就是文字错误消息。
作为一种折衷方案,我建议Any
将字典转换为自定义结构(类似于元组,但处理起来更好)
map
您的变量名已经暗示您需要一个 real 数组
struct Community {
let key : String
let value : Any
}
答案 1 :(得分:0)
sorted(by:)
返回序列的元素,使用给定的谓词作为元素之间的比较进行排序,因此您不能用作字典。
有关此功能的更多信息,您可以阅读sorted(by:) documentation