プログラミングにおいて、文字列はソートをできることを説明します。

ソートとは

データを一定の基準に従って並べること。同じデータをバラバラな順番にして、ソートした場合に必ず同じ順番になる。

プログラミングにおいては、配列から昇順または降順の配列を作ることを指すことが多いです。昇順のソートをした配列のN個目の値は、それより前の値より大きいまたは同じで、それよりあとの値より小さいまたは同じになっている。

ソートの操作をするためには、配列の比較できる値が入っている必要があります。

整数は比較できる

整数は、0より1が大きく、1より2が大きい。全ての整数は大小関係があり、比較ができます。

比較できる値の配列は比較できる

配列を比較するときは、それそれの配列の一つ目の値を取り出して比較して、異なる値であれば大小関係が決定し、同じ値であれば次の値取り出して比較します。この操作を繰り返して、値が取り出せない配列は小さいとします。

例えば、[0] < [1], [1, 1] < [1, 2], [1] < [1, 0]となります。

文字は数字として扱える

文字列ではなく、1つの文字についてです。

コンピュータは0と1のビット列しか扱うことができないので文字を表現するにも、各文字を1つの数字に割り当てることで表現しています。この割り当て表を文字コードと言います。アスキーコード(ASCII) や UTF-8がよく使われます。

アスキーコードでは、'A'を65、'a' を 97として扱います。

アスキーコードの文字列は比較できる

これらから、文字列を数字の配列であり、比較できます。

例えば、"a"→[97] < "b"→[96]となる。

アスキーコード以外の文字列は比較できるがプログラミング言語によって結果が異なる(たぶん)

アスキーコードは7bitで表現されており、それ以外の文字は複数バイトの文字として扱われる。プログラミング言語内部の文字列の扱いによって異なっている、そのため比較の結果も異なる。データベースでと、アプリケーションサーバー、Javascriptでソートした場合に結果が異なる場合がある。

アスキーコード以外意図しているソート順にはならないという前提で考えた方が良いので、ソート用の情報を別途持たせておくのが良いだろう。

意図した順番になるかはまた別の話

例えば"1", "2", "10"があった時に、大抵は"1", "10", "2"の順番に並んでしまう。意図したソート順に並べるのは一工夫必要です。