按键排序字典

时间:2014-08-19 06:47:19

标签: swift sorting dictionary

我想在Swift中对字典进行排序。我有一本字典:

"A" => Array[]
"Z" => Array[]
"D" => Array[]

等。我希望它像

"A" => Array[]
"D" => Array[]
"Z" => Array[]

我在SO上尝试了很多解决方案,但没有人为我工作。我正在使用XCode6 Beta 5,并且有些正在给出编译器错误,而一些解决方案正在提供异常。所以任何人都可以发布字典排序的工作副本。

13 个答案:

答案 0 :(得分:132)

let dictionary = [
    "A" : [1, 2],
    "Z" : [3, 4],
    "D" : [5, 6]
]

let sortedKeys = Array(dictionary.keys).sorted(<) // ["A", "D", "Z"]

修改

上述代码中的排序数组仅包含键,而必须从原始字典中检索值。但是,'Dictionary'也是{key,value}对的'CollectionType',我们可以使用全局'sorted'函数来获取包含键和值的排序数组,如下所示:

let sortedKeysAndValues = sorted(dictionary) { $0.0 < $1.0 }
println(sortedKeysAndValues) // [(A, [1, 2]), (D, [5, 6]), (Z, [3, 4])]

EDIT2 :每月更改的Swift语法目前更喜欢

let sortedKeys = Array(dictionary.keys).sort(<) // ["A", "D", "Z"]

全球sorted已弃用。

答案 1 :(得分:97)

Swift 2.0

Ivica M的答案的更新版本:

let wordDict = [
     "A" : [1, 2],
     "Z" : [3, 4],
     "D" : [5, 6]
]

let sortedDict = wordDict.sort { $0.0 < $1.0 }
print("\(sortedDict)") // 

Swift 3

wordDict.sorted(by: { $0.0 < $1.0 })

<强>注意:

有些人似乎对结果数组不是字典感到惊讶。 字典无法排序!生成的数据类型是一个排序数组,就像在@ Ivica的答案中一样。

答案 2 :(得分:25)

如果你想按键排序顺序迭代键和值,这个表格非常简洁

let d = [
    "A" : [1, 2],
    "Z" : [3, 4],
    "D" : [5, 6]
]

for (k,v) in Array(d).sorted({$0.0 < $1.0}) {
    println("\(k):\(v)")
}

答案 3 :(得分:14)

Swift 5 中,以便按KEYS排序Dictionary

let sortedYourArray = YOURDICTIONARY.sorted( by: { $0.0 < $1.0 })

为了按VALUES对Dictionary进行排序

let sortedYourArray = YOURDICTIONARY.sorted( by: { $0.1 < $1.1 })

答案 4 :(得分:13)

在swift 4中,你可以更聪明地写出来:

let d = [ 1 : "hello", 2 : "bye", -1 : "foo" ]
d = [Int : String](uniqueKeysWithValues: d.sorted{ $0.key < $1.key })

答案 5 :(得分:5)

对于Swift 3,以下排序按键对字典进行排序:

let unsortedDictionary = ["4": "four", "2": "two", "1": "one", "3": "three"]

let sortedDictionary = unsortedDictionary.sorted(by: { $0.0.key < $0.1.key })

print(sortedDictionary)
// ["1": "one", "2": "two", "3": "three", "4": "four"]

答案 6 :(得分:5)

对于Swift 4,以下内容对我有用:

let dicNumArray = ["q":[1,2,3,4,5],"a":[2,3,4,5,5],"s":[123,123,132,43,4],"t":[00,88,66,542,321]]

let sortedDic = dicNumArray.sorted { (aDic, bDic) -> Bool in
    return aDic.key < bDic.key
}

答案 7 :(得分:5)

快捷键5

输入要按字母顺序排序的字典。

// Sort inputted dictionary with keys alphabetically.
func sortWithKeys(_ dict: [String: Any]) -> [String: Any] {
    let sorted = dict.sorted(by: { $0.key < $1.key })
    var newDict: [String: Any] = [:]
    for sortedDict in sorted {
        newDict[sortedDict.key] = sortedDict.value
    }
    return newDict
}

dict.sorted(by:{$ 0.key <$ 1.key})通过它自身会返回一个 tuple (值,值),而不是一个字典 [值:值]。因此,for循环解析该元组以作为字典返回。这样,您放入字典并找回字典。

答案 8 :(得分:3)

在iOS 9&amp ;;中排序xcode 7.3,swift 2.2是不可能的,将“排序”更改为“排序”,如下所示:

let dictionary = ["main course": 10.99, "dessert": 2.99, "salad": 5.99]
let sortedKeysAndValues = Array(dictionary).sort({ $0.0 < $1.0 })
print(sortedKeysAndValues)

//sortedKeysAndValues = ["desert": 2.99, "main course": 10.99, "salad": 5.99]

答案 9 :(得分:3)

快速4和5

对于字符串键排序:

dictionary.keys.sorted(by: {$0.localizedStandardCompare($1) == .orderedAscending})

示例:

var dict : [String : Any] = ["10" : Any, "2" : Any, "20" : Any, "1" : Any]

dictionary.keys.sorted() 

["1" : Any, "10" : Any, "2" : Any, "20" : Any]

dictionary.keys.sorted(by: {$0.localizedStandardCompare($1) == .orderedAscending})

["1" : Any, "2" : Any, "10" : Any, "20" : Any]

答案 10 :(得分:1)

对于Swift 3,以下对我有用,Swift 2语法没有用:

Caused by: org.h2.jdbc.JdbcSQLException: Referentielle Integrität verletzt: "FKGVXJS381K6F48D5D2YI11UH89: PUBLIC.USER_AUTHORITY FOREIGN KEY(AUTHORITY_ID) REFERENCES PUBLIC.AUTHORITY(ID) ('bc78387e-3677-4b64-80ac-d481d0c479dc')"

答案 11 :(得分:1)

Swift 3排序(按:&lt;)

let dictionary = [
    "A" : [1, 2],
    "Z" : [3, 4],
    "D" : [5, 6]
]

let sortedKeys = Array(dictionary.keys).sorted(by:<) // ["A", "D", "Z"]

答案 12 :(得分:0)

这是对字典本身进行排序的一种优雅替代方法:

从Swift 4和5开始

let sortedKeys = myDict.keys.sorted()

for key in sortedKeys {
   // Ordered iteration over the dictionary
   let val = myDict[key]
}