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]
}