C#
 Computer >> コンピューター >  >> プログラミング >> C#

C#のCompareOrdinal()メソッドとは?文字列を序数比較する方法を解説

C#のCompareOrdinal()メソッドは、2つの指定されたStringオブジェクトを、それぞれの文字列に含まれる対応するCharオブジェクトの数値(Unicodeコードポイント)を評価することで比較する静的メソッドです。カルチャ(文化情報)に依存しない序数比較を行うため、言語的な並び替え規則ではなく、文字コードそのものに基づいて大小関係が判定される点が特徴です。

構文

public static int CompareOrdinal (string str1, string str2);

引数のstr1str2には、比較対象となる2つの文字列を指定します。

戻り値の意味

  • 0より小さい値:str1 が str2 よりも小さい場合(str1 < str2)
  • 0:両方の文字列が等しい場合(str1 = str2)
  • 0より大きい値:str1 が str2 よりも大きい場合(str1 > str2)

なお、比較は先頭の文字から順に行われ、最初に異なる文字が見つかった時点でその文字同士のコードポイントの差が返されます。

使用例1

using System;
public class Demo {
    public static void Main(string[] args) {
        string s1 = "Amy";
        string s2 = "Katie";
        string s3 = s2;
        Console.WriteLine("String1 = "+s1);
        Console.WriteLine("String2 = "+s2);
        Console.WriteLine("Are both the strings equal? = "+s1.Equals(s2));
        Console.WriteLine("Are both the strings equal? = "+s2.Equals(s3));
        Console.WriteLine(string.CompareOrdinal(s1, s2));
        Console.WriteLine(string.CompareOrdinal(s2, s3));
    }
}

実行結果

String1 = Amy
String2 = Katie
Are both the strings equal? = False
Are both the strings equal? = True
-10
0

この例では、「Amy」と「Katie」を比較すると、先頭の文字 'A'(コードポイント65)と 'K'(コードポイント75)の差である -10 が返されます。一方、s2 と s3 は同一の文字列を参照しているため内容が完全に一致し、0 が返ります。

使用例2

using System;
public class Demo {
    public static void Main(string[] args) {
        string s1 = "David";
        string s2 = "David";
        string s3 = s2;
        string s4 = "Tom";
        string s5 = s4;
        Console.WriteLine("String1 = "+s1);
        Console.WriteLine("String2 = "+s2);
        Console.WriteLine("String3 = "+s3);
        Console.WriteLine("String4 = "+s4);
        Console.WriteLine("String5 = "+s5);
        Console.WriteLine("Is s1 and s2 equal? = "+s1.Equals(s2));
        Console.WriteLine("Is s2 and s3 equal? = "+s2.Equals(s3));
        Console.WriteLine("Is s3 and s4 equal? = "+s3.Equals(s4));
        Console.WriteLine("Is s4 and s5 equal? = "+s4.Equals(s5));
        Console.WriteLine(string.CompareOrdinal(s1, s2));
        Console.WriteLine(string.CompareOrdinal(s2, s3));
        Console.WriteLine(string.CompareOrdinal(s3, s4));
        Console.WriteLine(string.CompareOrdinal(s4, s5));
    }
}

実行結果

String1 = David
String2 = David
String3 = David
String4 = Tom
String5 = Tom
Is s1 and s2 equal? = True
Is s2 and s3 equal? = True
Is s3 and s4 equal? = False
Is s4 and s5 equal? = True
0
0
-16
0

「David」と「Tom」を比較した場合は、先頭の文字 'D'(コードポイント68)と 'T'(コードポイント84)の差である -16 が返されます。また、同じ内容・同じ参照を持つ文字列同士の比較では、いずれも 0 となることが確認できます。このようにCompareOrdinal()を使えば、文字列の等価性だけでなく、どちらが辞書順として前後するかを数値で正確に判定できます。

  1. C#のConsole.ResetColor()メソッドの使い方を解説

    概要C#のConsole.ResetColor()メソッドは、コンソールの前景色(文字色)と背景色を、既定の配色に戻すために使用されます。プログラム内で一時的に文字色や背景色を変更した後、元の状態へ復元したい場合に非常に便利です。構文ResetColor()メソッドの構文は以下のとおりです。public static void ResetColor ();このメソッドは引数を受け取らず、戻り値もありません。また、staticメソッドであるため、インスタンスを生成することなく、Consoleクラスから直接呼び出すことができます。使用例それでは、C#でConsole.ResetColor()メソッ

  2. C#のConsole.MoveBufferArea()メソッドの使い方を徹底解説

    C#のConsole.MoveBufferArea()メソッドは、コンソールの画面バッファ内にある指定されたソース領域を、指定されたコピー先(ターゲット)領域へ移動するために使用されるメソッドです。コンソールアプリケーションで画面上のテキストを別の位置に移動させたい場合に便利です。構文MoveBufferArea()メソッドの基本的な構文は以下の通りです。public static void MoveBufferArea(int sourceLeft, int sourceTop, int sourceWidth, int sourceHeight, int targetLeft, int t