2016-07-16 24 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から部分的に来た)

私はXcodeの8のベータ1スウィフト3を使用しています。

+0

辞書は定義によって順不同されます。要求された結果を辞書として取得することは不可能です。 Swiftでは 'NSMutableDictionary'を使わないでください。スウィフト「ディクショナリー」とは全く関係がありません。 – vadian

+0

そして、はい、私は辞書が順序付けられていないと理解しています...しかし、私はそれを注文したい;)。それは多少無関係ですが、何が問題なのですか? – owlswipe

答えて

7

通常の辞書で利用可能なコレクションメソッドは引き続き使用できますが、オブジェクトの種類は強制されません。これにより、継承が不安定になります。

docsでは、sortedは、同時にキーと値にアクセスし、それを1つの要素とみなして辞書を並べ替えることができるクロージャを使用します。

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

a.valueb.valueのタイプはAnyObjectであるように、鋳造が、必要とされます。これはXcodeバージョン8.0ベータ版(8S128d)を実行している私のコンピュータで動作します。

+0

'NSMutableDictionary'は**スウィフト' 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 }) 
関連する問題