gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-30 21:59:42 26 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/51561278/

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