Ale*_*mad 112 sorting dictionary swift
我想在Swift中对字典进行排序.我有一个字典,如:
"A" => Array[]
"Z" => Array[]
"D" => Array[]
Run Code Online (Sandbox Code Playgroud)
我希望它像
"A" => Array[]
"D" => Array[]
"Z" => Array[]
Run Code Online (Sandbox Code Playgroud)
等等
我在SO上尝试了很多解决方案,但没有人为我工作.我正在使用XCode6 Beta 5,并且其中一些正在给出编译器错误,而一些解决方案正在提供异常.所以任何人都可以发布字典排序的工作副本.
Ivi*_* M. 146
let dictionary = [
"A" : [1, 2],
"Z" : [3, 4],
"D" : [5, 6]
]
let sortedKeys = Array(dictionary.keys).sorted(<) // ["A", "D", "Z"]
Run Code Online (Sandbox Code Playgroud)
编辑:
上述代码中的排序数组仅包含键,而必须从原始字典中检索值.但是,'Dictionary'
也是'CollectionType'
(键,值)对的一部分,我们可以使用全局'sorted'
函数来获取包含键和值的排序数组,如下所示:
let sortedKeysAndValues = sorted(dictionary) { $0.0 < $1.0 }
println(sortedKeysAndValues) // [(A, [1, 2]), (D, [5, 6]), (Z, [3, 4])]
Run Code Online (Sandbox Code Playgroud)
EDIT2:每月更改Swift语法目前更喜欢
let sortedKeys = Array(dictionary.keys).sort(<) // ["A", "D", "Z"]
Run Code Online (Sandbox Code Playgroud)
全球sorted
已被弃用.
Dan*_*ieu 102
Ivica M答案的更新版本:
let wordDict = [
"A" : [1, 2],
"Z" : [3, 4],
"D" : [5, 6]
]
let sortedDict = wordDict.sort { $0.0 < $1.0 }
print("\(sortedDict)") //
Run Code Online (Sandbox Code Playgroud)
wordDict.sorted(by: { $0.0 < $1.0 })
Run Code Online (Sandbox Code Playgroud)
注意:
有些人似乎对结果数组不是字典感到惊讶.字典无法排序!结果数据类型是一个排序数组,就像在@ Ivica的答案中一样.
小智 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)")
}
Run Code Online (Sandbox Code Playgroud)
Abd*_*han 16
在Swift 5 中,为了按 KEYS 对字典进行排序
let sortedYourArray = YOURDICTIONARY.sorted( by: { $0.0 < $1.0 })
Run Code Online (Sandbox Code Playgroud)
为了按值对字典进行排序
let sortedYourArray = YOURDICTIONARY.sorted( by: { $0.1 < $1.1 })
Run Code Online (Sandbox Code Playgroud)
小智 13
在swift 4中,你可以更聪明地写它:
let d = [ 1 : "hello", 2 : "bye", -1 : "foo" ]
d = [Int : String](uniqueKeysWithValues: d.sorted{ $0.key < $1.key })
Run Code Online (Sandbox Code Playgroud)
我尝试了以上所有内容,简而言之,您需要的只是
let sorted = dictionary.sorted { $0.key < $1.key }
let keysArraySorted = Array(sorted.map({ $0.key }))
let valuesArraySorted = Array(sorted.map({ $0.value }))
Run Code Online (Sandbox Code Playgroud)
对于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
}
Run Code Online (Sandbox Code Playgroud)
这是对字典本身进行排序的一种优雅的替代方法:
从 Swift 4 和 5 开始
let sortedKeys = myDict.keys.sorted()
for key in sortedKeys {
// Ordered iteration over the dictionary
let val = myDict[key]
}
Run Code Online (Sandbox Code Playgroud)
斯威夫特 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
}
Run Code Online (Sandbox Code Playgroud)
dict.sorted(by: { $0.key < $1.key })由它自己返回一个元组(value, value) 而不是字典[value: value]。因此,for 循环解析元组以作为字典返回。这样,您放入字典并取回字典。
小智 5
斯威夫特 4 & 5
对于字符串键排序:
dictionary.keys.sorted(by: {$0.localizedStandardCompare($1) == .orderedAscending})
Run Code Online (Sandbox Code Playgroud)
例子:
var dict : [String : Any] = ["10" : Any, "2" : Any, "20" : Any, "1" : Any]
dictionary.keys.sorted()
Run Code Online (Sandbox Code Playgroud)
["1" : Any, "10" : Any, "2" : Any, "20" : Any]
dictionary.keys.sorted(by: {$0.localizedStandardCompare($1) == .orderedAscending})
Run Code Online (Sandbox Code Playgroud)
["1" : Any, "2" : Any, "10" : Any, "20" : Any]