2016-07-16 16 views
6

Swift 3에서 NSMutableDictionary를 정렬하려고하면 Swift 2의 코드가 더 이상 작동하지 않습니다 (다양한 오류). Swift 3에서 정렬 사전

나는 수레되어 그 값에 의해 내 사전을 정렬하려면 다음 코드를 사용하는 것을 시도하고있다 :

var sortedDict = unsortedDict.allValues.sorted({ $0 < $1 }).flatMap({ floatedlotterydictionary[$0] }) 

는 기본적으로, 나는이 정렬되지 않은 사전을 원하는 ...

{ 
a = "1.7"; 
b = "0.08"; 
c = "1.4"; 
} 

을 .. .이 정렬 된 사전으로 바꾸려면 ...

{ 
b = "0.08"; 
c = "1.4"; 
a = "1.7"; 
} 

위의 코드 줄을 사용하면 오류 "인수 유형 anyobject는 $0 < $1 부분에 대해 NSCopying 유형을 따르지 않습니다. 그렇다면 Swift 3에서 값을 기준으로 사전을 어떻게 정렬 할 수 있습니까?

(참고 : 코드 줄은 this answer에서 부분적으로했다.) 8 베타 1 엑스 코드 에서 내가 스위프트 3을 사용하고

.

+0

사전은 정의에 의해 정렬되지 않은됩니다. 요청한 결과를 사전으로 가져 오는 것은 불가능합니다. 그리고 Swift에서 NSMutableDictionary를 사용하지 마십시오. 그것은 빠른 사전과 전혀 관련이 없습니다. – vadian

+0

그리고 예, 나는 사전이 정렬되어 있지 않다는 것을 이해합니다. 그러나 그것을 주문하고 싶습니다;). 그리고 다소 관련성이 없지만, 무엇이 잘못 되었습니까? – owlswipe

답변

7

확인. 일반 딕셔너리에서 사용할 수있는 컬렉션 메서드는 여전히 사용할 수 있지만 개체 유형이 적용되지 않아 안전하지 않은 상속이 추가됩니다.

docs에서 sorted은 키와 값에 동시에 액세스 할 수있게 해주는 클로저를 사용하여 하나의 요소로 간주하여 사전을 정렬합니다. a.valueb.value의 종류 AnyObject 같이

let k: NSMutableDictionary = ["a" : 1.7, "b" : 0.08, "c" : 1.4] 
print(k.sorted(isOrderedBefore: { (a, b) in (a.value as! Double) < (b.value as! Double) })) 

주조

이 요구된다. 이것은 내 컴퓨터에서 작동하며 Xcode 버전 8.0 베타 (8S128d)를 실행합니다.

+0

'NSMutableDictionary'는 ** Swift'Dictionary'에 ** ** 연결하지 않습니다. – vadian

+0

저는 지금 노트북에 있습니다 - 고마워요. – Mrwerdo

+1

결과는 튜플이 아닌 사전의 배열입니다. – vadian

4

이 방법있다 :

let k = ["a" : 1.7, "b" : 0.08, "c" : 1.4] 

print(k.flatMap({$0}).sort { $0.0.1 < $0.1.1 })