gpt4 book ai didi

swift - 按字母顺序对字典进行排序 无法将类型 '[(key: String, value: AnyObject)]' 的值分配给类型 'Dictionary?'

转载 作者:行者123 更新时间:2023-11-29 05:31:10 27 4
gpt4 key购买 nike

我有这本词典,是从网络服务获取的:

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>?

最佳答案

正如评论中提到的,字典(包含键值对的集合类型)根据定义是无序的,无法排序。

应用于字典的collectionsorted函数以字典为例

["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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com