[Swift3]オプション付きで文字列を比較する(大文字小文字の無視とか)

  • このエントリーをはてなブックマークに追加
  • Pocket
  • LINEで送る
Swift

比較演算子(==、>など)を使えば、簡単に文字列の比較を行うことができる。

しかし、別の方法を用いることで「大文字・小文字を無視する」「数字を”数値として”比較する」などの高度な比較が実施可能だ。

オプションを指定して文字列を比較する方法

以下の例のように、比較元のStringのcompare(_:option:)メソッドを利用する。
メソッドの戻り値として「.orderedAscending」「.orderedDescending」「.orderedSame」のいずれかが取得されるので、それを使って処理の分岐を行えば良い。

optionの部分をいじることで、様々な比較モードで文字列の比較を行うことができる。

比較オプション

大文字・小文字を区別しない

冒頭の例の通り、「.caseInsensitive」オプションを使用する。

半角・全角を区別しない

.widthInsensitive」オプションを使用する。

 

ただし「半角・全角スペース」や「濁点/半濁点付きの半角・全角カタカナ」など、同じとみなされない文字もある。

数字を「数値として」比較する

例えば「file10.txt」と「file2.txt」を普通に比較すると、5文字目の時点で「2」の方が辞書上は後ろになるため「file10.txt < file2.txt」という結果になる。

ところが「.numeric」オプションを使用すると、文字列の数字部分を「数値として」比較するようになる。
この場合は「file○○.txt」部分が共通で、かつ2よりも10の方が数値上は大きいため、「file10.txt > file2.txt」という結果が得られる。

ダイアクリティカルマークを無視する

ダイアクリティカルマークとは「Ç」「é」「ö」などにある、発音を区別するために文字に付加される記号のこと。

.diacriticInsensitive」オプションを指定すると、ダイアクリティカルマークの有無を無視しても実の比較を行うようになる。

  • このエントリーをはてなブックマークに追加
  • Pocket
  • LINEで送る

SNSでもご購読できます。