課題として挙げられてる「Dictonaly
型で value
でソートし、その順で key
を配列に格納したい」を落ち着いてその通りに記述していくと上手くいくと思います。
Dictionary 型を value でソート
こちらは Dictionary
型に備わっている sorted
メソッドを使います。引数でクロージャーを指定できて、そこでは「隣り合う二つの要素 $0
と $1
をどういう順序で並ばせたいか」を記述します。なお、Dictionary
型の場合、要素は「キー (key
) と値 (value
) の組み」で表現されます。
今回の課題であれば「value
(の昇順)でソートしたい」とのことなので、ここでは $0.value < $1.value
を指定します。
ひとまず、この部分だけのコードを書くと、次のようになります。
swift
1.sorted { $0.value < $1.value }
このようにして、得られる結果の型は「キーと値の組みの配列 (Array<(Key, Value)>
)」になります。
その順で key を配列に格納
こちらは Array
型に備わっている map
メソッドを使います。引数でクロージャーを指定できて、そこでは「与えられた配列の各要素 $0
をどんなふうに変換したいか」というルールを記述します。
今回の課題であれば「(並び替えたキーと値の組みの配列を)その順で key を配列に格納したい」ということになるので、ここでは「キーと値の組み」から「キーだけ」への変換を行うために $0.key
というふうにして、キーと値の組みからキーだけを使うように指定します。
この部分だけのコードを書くと次のようになります。
これらを順序立てて実行することで、結果を取得
あとはこれを、目的の Dictionary
型のインスタンスに対して順序立てて組み立てあげると、目的の結果が得られるはずです。実際には次のような感じにコードを書いていくと上手くいくと思います。
swift
1let dic = [1 : 10, 2 : 9, 3 : 8, 4 : 7, 5 : 6]
2let array = dic
3 .sorted { $0.value < $1.value }
4 .map { $0.key }