Сортировка Словаря по ключам
Я хочу отсортировать словарь в Swift. У меня есть словарь, как:
"A" => Array[]
"Z" => Array[]
"D" => Array[]
etc. Я хочу, чтобы это было похоже
"A" => Array[]
"D" => Array[]
"Z" => Array[]
etc.
Я пробовал много решений на так, но никто не работал для меня. Я использую Xcode6 Beta 5, и на нем некоторые дают ошибку компилятора, а некоторые решения дают исключения. Так что любой, кто может разместить рабочую копию сортировки словаря.
10 ответов:
let dictionary = [ "A" : [1, 2], "Z" : [3, 4], "D" : [5, 6] ] let sortedKeys = Array(dictionary.keys).sorted(<) // ["A", "D", "Z"]
EDIT:
сортированный массив из приведенного выше кода содержит только ключи, в то время как значения должны быть получены из исходного словаря. Однако,
'Dictionary'
тоже'CollectionType'
пар (ключ, значение), и мы можем использовать глобальный'sorted'
функция для получения отсортированного массива, содержащего как ключи, так и значения, например:let sortedKeysAndValues = sorted(dictionary) { .0 < .0 } println(sortedKeysAndValues) // [(A, [1, 2]), (D, [5, 6]), (Z, [3, 4])]
EDIT2: ежемесячное изменение синтаксиса Swift в настоящее время предпочитает
let sortedKeys = Array(dictionary.keys).sort(<) // ["A", "D", "Z"]
глобальные
sorted
является устаревшим.
Swift 2.0
обновленная версия ответа Ивицы м:
let wordDict = [ "A" : [1, 2], "Z" : [3, 4], "D" : [5, 6] ] let sortedDict = wordDict.sort { .0 < .0 } print("\(sortedDict)") //
Swift 3
wordDict.sorted(by: { .0 < .0 })
обратите внимание:
некоторые из вас, кажется, удивлены, что результирующий массив не является словарем. словари не могут быть отсортированы! Результирующий тип данных-это отсортированный массив, как и в ответе @Ivica.
Если вы хотите перебирать как ключи, так и значения в порядке сортировки ключей, эта форма довольно лаконична
let d = [ "A" : [1, 2], "Z" : [3, 4], "D" : [5, 6] ] for (k,v) in Array(d).sorted({.0 < .0}) { println("\(k):\(v)") }
в swift 4 Вы можете написать его умнее:
let d = [ 1 : "hello", 2 : "bye", -1 : "foo" ] d = [Int : String](uniqueKeysWithValues: d.sorted{ .key < .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 }
"сортировка" в 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 }) print(sortedKeysAndValues) //sortedKeysAndValues = ["desert": 2.99, "main course": 10.99, "salad": 5.99]
для Swift 3, Следующая сортировка возвращает сортированный словарь по ключам:
let unsortedDictionary = ["4": "four", "2": "two", "1": "one", "3": "three"] let sortedDictionary = unsortedDictionary.sorted(by: { .0.key < .1.key }) print(sortedDictionary) // ["1": "one", "2": "two", "3": "three", "4": "four"]
я попробовал все вышеперечисленное, в двух словах все, что вам нужно-это
let sorted = dictionary.sorted { .key < .key } let keysArraySorted = Array(sorted.map({ .key })) let valuesArraySorted = Array(sorted.map({ .value }))