我想在Swift中对字典进行排序。我有一本字典,例如:
"A" => Array[]
"Z" => Array[]
"D" => Array[]
等,我希望它像
"A" => Array[]
"D" => Array[]
"Z" => Array[]
等等
我在SO上尝试了许多解决方案,但没有人为我工作。我正在使用XCode6 Beta 5,在它上面有一些正在给编译器错误,在一些解决方案中有例外。因此,任何可以发布字典排序工作副本的人。
sortedKeys
功能。
我想在Swift中对字典进行排序。我有一本字典,例如:
"A" => Array[]
"Z" => Array[]
"D" => Array[]
等,我希望它像
"A" => Array[]
"D" => Array[]
"Z" => Array[]
等等
我在SO上尝试了许多解决方案,但没有人为我工作。我正在使用XCode6 Beta 5,在它上面有一些正在给编译器错误,在一些解决方案中有例外。因此,任何可以发布字典排序工作副本的人。
sortedKeys
功能。
Answers:
let dictionary = [
"A" : [1, 2],
"Z" : [3, 4],
"D" : [5, 6]
]
let sortedKeys = Array(dictionary.keys).sorted(<) // ["A", "D", "Z"]
编辑:
上面代码中的排序数组仅包含键,而值必须从原始字典中检索。但是,'Dictionary'
也是'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
不推荐使用全局变量。
let sortedKeys = dictionary.keys.sorted()
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的答案一样。
Binary operator > can not be compared to two
Any`操作数。垂头丧气也不起作用
在Swift 4中,您可以更聪明地编写它:
let d = [ 1 : "hello", 2 : "bye", -1 : "foo" ]
d = [Int : String](uniqueKeysWithValues: d.sorted{ $0.key < $1.key })
对于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
}
在Swift 5中,为了按KEYS对Dictionary进行排序
let sortedYourArray = YOURDICTIONARY.sorted( by: { $0.0 < $1.0 })
为了按VALUES对Dictionary进行排序
let sortedYourArray = YOURDICTIONARY.sorted( by: { $0.1 < $1.1 })
对于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"]
在iOS 9和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]
斯威夫特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})本身返回一个元组(值,值),而不是字典 [value:value]。因此,for循环解析该元组以作为字典返回。这样,您放入字典并找回字典。
斯威夫特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]
对于Swift 3,以下内容对我有效,而Swift 2语法无效:
// menu is a dictionary in this example
var menu = ["main course": 10.99, "dessert": 2.99, "salad": 5.99]
let sortedDict = menu.sorted(by: <)
// without "by:" it does not work in Swift 3
sortedDict
啊 什么menu
啊 该代码也似乎无效。