簡體   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