2016-05-26 3 views
3

すべての良い日;) SQLのような文字列を比較するためのアルゴリズムや解決済みのソリューションを誰かに教えてもらえますか? SQLではインスタンス についてはSQLのようなC#での文字列の比較

私は

=または< =、>、< e.t.c.のための文字列を比較することができます

既知のとおり、私たちはそれを行うことはできません。

私は "AA"> "B" "AB" < "AA"> = "BCA" "ABC" というように。..

また、多分誰かが知っている

のようなものを比較したいですどのようなロジックSQLによってそれを行うのですか?

+1

もっと詳しく記述できますか? –

答えて

7

文字列はIComparableを実装していますので、CompareToを使用できます。

void Main() 
{ 
    if ("a".CompareTo("b") < 0) 
    { 
     Console.WriteLine("A is less than B"); 
    } 

    if ("a".CompareTo("b") <= 0) 
    { 
     Console.WriteLine("A is less than or equal to B"); 
    } 

    if ("a".CompareTo("a") == 0) 
    { 
     Console.WriteLine("A equals A"); 
    } 

    if ("c".CompareTo("b") > 0) 
    { 
     Console.WriteLine("C is greater than B"); 
    } 

    if ("c".CompareTo("b") >= 0) 
    { 
     Console.WriteLine("C is greater than or equal to B"); 
    } 
} 

あなたは、大文字と小文字を区別しない比較をしたい場合は、その後、あなたはケースを無視することができますstring.Compareのオーバーロードを使用する必要があります。しかし、論理は同じです。

+0

そのような比較に*欠点*があります:左の引数が 'null'の場合はどうなりますか? 'null.CompareTo(...)'は例外をスローします。 –

+3

@DmitryBychenkoはい、エラーチェックと防御プログラミングが実装者に任せられます。それは私が投稿したコードの瑕疵はほとんどありません! –

3

さて、"aa" < "ab"

bool result = String.Compare("aa", "ab") < 0; 

に等しく、そうで:

// "abc" >= "bca" 
bool result = String.Compare("abc", "bca") >= 0; 

"left" <=> "right"ための一般的なパターンは、String.Compare(left, right)戻り

ので

String.Compare("left", "right") <=> 0 

あります

  • 値(例えば、-123)left < right
  • ゼロleft == right
  • postivie値(例えば789)when left 'right'
+1

@Kernighan: 'Compare(left、right)'は、 'left'の場合*正の値('> 0')を返し、 'right'よりも大きい場合、' left' * '、' right'よりも 'left'のときは*負の値になります。 –

+0

ありがとう、私は理解しています。 – Kernighan