String.CompareOrdinalメソッドの罠:文字列比較でハマるポイントと対策
1. はじめに
こんにちは。エンジニアの長岡です。 今回はString型を比較する際、String.CompareOrdinalメソッドを使った際の罠と実際に詰まった点についてまとめます。 文字列比較がなんかうまくいかないな?というとき、是非活用してみてください!
2. String.CompareOrdinalメソッドって?
String.CompareOrdinalメソッドとは、2つの引数を評価して、比較して結果をintで返してくれるメソッド。 例としてString.CompareOrdinal(A,B)と利用する際のそれぞれの戻り値を下にまとめました。 A>Bの場合:1以上 A
3. 評価って?
一見便利そうなメソッドですが、実際の比較基準って…?と思いますよね。 String.CompareOrdinalでは、文字列をUnicodeでとらえ、一文字ずつ比較しています。
4. 実際困ったこと
「1.1.2」と「1.1.10」を比較した際、ぱっと見は1.1.10の方が大きいという判定結果になりそうですよね。 ただ、この文字列を比較すると、「1.1.2」が大きいと判定されてしまいます。 これは、「1」と「1」が一緒、その次の「1」と「1」も一緒、ただその次が2と1となるので、「1.1.2」のほうが大きくなってしまいます。
5. まとめ
文字列を簡単に比較できるString.CompareOrdinalメソッドは有用ですが、数字を扱うときは注意が必要ということをまとめさせていただきました。 String.CompareOrdinalメソッドを使った比較がなんかうまくいかないな?という際は素直にsplit等で区切って比較したい部分をまとめていくのが一番ですね。