SwiftのDictionaryをkeyでソートする方法

2015.05.17
swiftのdictionary型をkeyでソートする記事のアイキャッチ画像

こんにちは、@Yuuです。
SwiftのDictionaryをkeyでソートする方法を紹介します。
ただ、今回紹介する方法よりもっといい方法があるんじゃないか?と思ってるので、もっとやりやすい方法をご存知の方はぜひ教えて下さい!

スポンサーリンク

やりたいこと

上のような変数dictがあった場合に

上記のように表示したい。
というのが今回のやりたいことです。

ちなみにSwiftでDictionaryをfor文で回す場合、以下のように記述するかと思いますが、

上記のように記述した場合、以下のように表示されます。

keyを「"a","d","c","b"」の順番で設定したつもりなのに、
表示される順番がバラバラですね・・。

これはどうやらDictionaryをfor文で回した際は、
順番は保障してくれないそうで、格納した順番を気にする場合は、格納した順番を守ってくれる配列を使った方がいいそうです。
うーむ、ややこしい・・(; ・`д・´)

Dictionaryをkeyでソートして出力する

じゃあ、Dictonaryをソートして表示するにはどうしたらええねん!?
という話ですよね。

結論から言ってしまうと、まずDictionaryのkeyだけを取り出し配列を作り、その配列を回しDictionaryと比較するという事をやります。

うん、言葉だけだと良く分からないですね。
良く分からないと思うので、実際にやってみましょう!

keyだけでArrayを作り、ソートする

使用するDictionary型の変数は、最初に提示したvar dict : [String : String]を使用します。

まずkeyだけを取り出して新たな配列を作り、更にその配列をソートします。

4行目はソートを行っています。
初めて見た時は「随分独特な書き方をするなぁ」と思ったのですが、他にもこのように書く言語があるんですかね?

とりあえず、ちゃんとソートされているか出力してみましょう。

無事ソート出来ていますね。

ちなみに
先程の4行目のソート方法は昇順で行っていますが、降順で行う場合は

のように書けばOKです(๑•̀ㅂ•́)و✧

ソートしたkeyをfor文で回し、dictを入れ子で回して結果を出力する

Dictonaryだとfor文の出力順番が保障されないですが、
配列であれば大丈夫!
なので、ソートを行ったkeysをfor文で回し、そのkeyの値と同じkeyの値を持つdictのvalueを表示すれば、ソートが行えているはず・・!

百聞は一見にしかず、ということで文章でごちゃごちゃ書くより、やったものをお見せした方が分かりやすいですね。

ちゃんとソートが行えていますね!
(๑•̀ㅂ•́)و✧

一応、今回の処理全文を記載しておきます。

あとがき

Swiftだとソートの書き方が独特だなぁ、と思いました。
あと、Dictonaryだと何故for文の順番がおかしくなってしまうんでしょう?

Dictonaryの状態でも一発でソートが出来て、for文で回した際にも順番が保障されればいいのに・・

ではでは
今回はこの辺で!ヽ(•̀ω•́ )ゝ✧

swiftのdictionary型をkeyでソートする記事のアイキャッチ画像

この記事が気に入ったらいいね!
して最新情報をチェックしよう!

スポンサーリンク