按字母顺序排序字典无法将类型[[(键:字符串,值:AnyObject)]'的值分配为'Dictionary <string,anyobject =“”>?

时间:2018-07-27 15:37:55

标签: swift

我有这本词典,是从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>?

2 个答案:

答案 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