Swiftで配列(Array)をソート(sort, sorted)

スポンサーリンク

Swift で配列(Array)をソートする方法を調べました。名前(String 型)のデータの配列を、大文字・小文字を無視してソートしたかった。例としては、[ “Mike”, “dave”, “sara”, “David”, “margaret” ] のような配列を [“dave”, “David”, “margaret”, “Mike”, “sara”] と、大文字・小文字を無視してソートしたかったのが調べたきっかけです。

— 環境 —
Xcode 6.3.2
Swift 1.2

【お知らせ】 英単語を画像イメージで楽に暗記できる辞書サイトを作りました。英語学習中の方は、ぜひご利用ください!
画像付き英語辞書 Imagict | 英単語をイメージで暗記
【開発記録】
英単語を画像イメージで暗記できる英語辞書サービスを作って公開しました
スポンサーリンク

sort で破壊的ソート、sorted で非破壊ソート

配列をソートするには Array#sort と Array#sorted というメソッドがあって、sort は元の配列自身を破壊的に変更してソートを行います。sorted のほうは非破壊的なソートを行い、元の配列自身を変更せずにソート済みの配列を返す。

以降、Xcode の Playground での動作確認です。

まずは sorted を使った非破壊的なソート。クロージャにソートの比較条件を書きます。{ $0 < $1 } と、要素が昇順になるような条件を渡している。

sorted を使うと、元の配列自身は変更されず元のままであることが分かります。 次に破壊的なソートとなる sort を使った例。

元の配列自身(names)が、破壊的に変更されてソートされました。

大文字・小文字を無視してソート、逆順にしたりなど

大文字・小文字を無視してソートしたい場合… つまり [“dave”, “David”, “margaret”, “Mike”, “sara”] という風に、dave, margaret が David, Mike より前に来るようにソートしたい場合は、クロージャに書くソート条件を一旦全て小文字にしてから比較するようにする。

逆順にするには、Array#reverse() を使う。

names は元のままなので、reverse() は非破壊なメソッドのようです。

Ruby の Array#sort メソッドに似た感じで、Swift の Array#sort もクロージャに比較条件を渡してソートするので、個人的には分かりやすいです。以上簡単ではありますけど、Swift で配列のソートを行うサンプルでした。

スポンサーリンク
 
スポンサーリンク

Leave Your Message!