課題として挙げられてる「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 }