繁体   English   中英

Swift 4字典[String:AnyObject]按字母顺序按键排序

[英]Swift 4 Dictionary [String : AnyObject] sort by key in alphabetical order

我有一个定义为[String:AnyObject]的字典,如下所示:

let json = try JSONSerialization.jsonObject(with: data!, options:.allowFragments) as! [String : AnyObject]

现在,我试图按键将它们按字母顺序排列。 我尝试了以下方法:

self.appDelegate.communityArray = json.sorted(by: { $0.0 < $1.0 })

但是我得到这个错误:

无法将类型[[(key:String,value:AnyObject)]'的值分配给类型[[String:AnyObject]?

我究竟做错了什么?

我的变量json是:

({"BBB" : Array("aaa", "bbb", "ccc")}, {"AAA" : Array("aaa", "bbb", "ccc")})

我想要得到的是:

({"AAA" : Array("aaa", "bbb", "ccc")}, {"BBB" : Array("aaa", "bbb", "ccc")})

您的communityArray是错误的类型。 如错误提示所示,您需要的类型是[(key: String, value: AnyObject)] (元组数组)。

我认为第一步是改变

let json = try JSONSerialization.jsonObject(with: data!, options:.allowFragments) as! [String : AnyObject]

let json = try JSONSerialization.jsonObject(with: data!, options:.allowFragments) as! [String : Any]

但是我不明白为什么要对字典排序。也许您打算将变量json声明为Array?

由于您尚未提供实际的JSON,因此我不得不稍作猜测。 但是正如其他人告诉您的那样,您不应该依赖Dictionary中键的顺序。 您始终可以仅对键进行排序,并相应地访问Dictionary 由于sorted将返回一个Array因此以下游乐场应该为您显示效果:

import Cocoa

let jsonData = """
    {"BBB" : ["aaa", "bbb", "ccc"], "AAA" : ["aaa", "bbb", "ccc"]}
""".data(using: .utf8)!

do {
    let dict = try JSONSerialization.jsonObject(with: jsonData, options:.allowFragments) as! [String : Any]
    print(dict)
    let array = dict.sorted(by: {$0.0 < $1.0})
    print(array)
    print(type(of:array))
} catch {
    print(error)
}

我建议您修改您的结构定义,以使像

let dict = try JSONDecoder().decode([String:Any].self, from:jsonData)

在你的内部do 由于Any都无法实现Codable因此此Codable因此应将其替换为“真实的东西”。 当前版本将为您提供NSArray对象作为dict中的值,很难使用。 您的代码将从适当的定义(如果可能)中大大受益。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM