[swift] 키를 기준으로 사전 정렬

Swift에서 사전을 정렬하고 싶습니다. 나는 같은 사전을 가지고있다 :

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

등 나는 그것을 좋아합니다

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

기타

나는 많은 솔루션을 시도했지만 아무도 나를 위해 일하지 않았다. XCode6 Beta 5를 사용하고 있으며 일부는 컴파일러 오류를 발생시키고 일부 솔루션은 예외를 제공합니다. 따라서 사전 정렬 작업 사본을 게시 할 수있는 사람입니다.



답변

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 : 월간 변화하는 스위프트 구문은 현재 선호합니다.

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

전역 sorted은 더 이상 사용되지 않습니다.


답변

스위프트 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)") // 

스위프트 3

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

주의:

결과 유형이 사전이 아닌 배열이라는 사실에 놀라지 마십시오. 사전은 정렬 할 수 없습니다 ! 결과 데이터 유형은 @Ivica의 답변과 마찬가지로 정렬 된 배열입니다.


답변

키와 키 정렬 순서로 값을 반복하려면이 형식이 간결합니다.

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)")
}


답변

신속한 4에서는 더 똑똑하게 작성할 수 있습니다.

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


답변

간단히 말해서 위의 모든 것을 시도해 보았습니다.

let sorted = dictionary.sorted { $0.key < $1.key }
let keysArraySorted = Array(sorted.map({ $0.key }))
let valuesArraySorted = Array(sorted.map({ $0.value }))


답변

스위프트 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
}


답변

이것은 사전 자체를 정렬하는 우아한 대안입니다.

스위프트 4 & 5 기준

let sortedKeys = myDict.keys.sorted()

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