簡體   English   中英

Swift:對數字字符串字典進行排序

[英]Swift: Sort Dictionary of Number Strings

我有一個數字字符串字典,看起來像這樣:

let comph : [String : [String : String]] = [
             "1":["title" : "first title"], 
             "2":["title" : "second title"],
             "10": ["title" : "last title"]
             ]

然后,當我使用comph.sort { $0.0 < $1.0 }對字典進行排序時,我得到了:

let sortedComph = comph.sort { $0.0 < $1.0 }
print(sortedComph) //["1":["title" : "first title"],"10": ["title" : "last title"],"2":["title" : "second title"]]

如何對字典排序,使其以數字順序返回鍵?

例如: ["1":["title" : "first title"],"2":["title" : "second title"],"10": ["title" : "last title"]]

謝謝'

根據定義,Swift中的字典是未排序的集合。 如果要維持訂單,則需要使用其他類型。

但是,如果您有興趣的話,看起來這家伙在Swift中寫了OrderedDictionary

學習Swift:有序詞典

或者,一種快速的骯臟解決方案是將鍵提取到數組中,對其進行排序,然后遍歷數組並使用鍵進行字典查找。

如果您想要一個可以表示數據的結構數組

struct Model
{
  var key:String!
  var title:String!
  // etc...
}

然后聲明該結構的數組:

     var arrayOfStructure = [Model]()

然后你排序

您的示例中的sortedComph常量不再是字典,而是(鍵,值)元組的數組。 您遇到的問題是,在對字符串進行排序時,進行比較時不會將字符串視為數字值。 就是您需要解決的問題。

解決此問題的一種方法是創建Int? 比較函數中來自字符串的實例:

let sortedComph = comph.sort { Int($0.0) < Int($1.0) }
// [("1", ["title": "first title"]), ("2", ["title": "second title"]), ("10", ["title": "last title"])]

這樣,結果數組將按字符串鍵中的整數值排序。 任何非整數鍵都將在列表的開頭進行分組,因為這是nil排序的方式。

更健壯的方法可能是使用NSString.compare(:options:)方法:

let sortedComph = comph.sort {
    ($0.0 as NSString).compare($1.0, options: .NumericSearch) == .OrderedAscending
}
// [("1", ["title": "first title"]), ("2", ["title": "second title"]), ("10", ["title": "last title"])]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM