我想在Swift中对字典进行排序。我有一本字典:
"A" => Array[]
"Z" => Array[]
"D" => Array[]
等。我希望它像
"A" => Array[]
"D" => Array[]
"Z" => Array[]
等
我在SO上尝试了很多解决方案,但没有人为我工作。我正在使用XCode6 Beta 5,并且有些正在给出编译器错误,而一些解决方案正在提供异常。所以任何人都可以发布字典排序的工作副本。
答案 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)
Ivica M的答案的更新版本:
let wordDict = [
"A" : [1, 2],
"Z" : [3, 4],
"D" : [5, 6]
]
let sortedDict = wordDict.sort { $0.0 < $1.0 }
print("\(sortedDict)") //
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]
}