4

デフォルトのソート順は実装の詳細ですか? または、Default Comparer が選択されているのはどうしてですか?

アドバイスを思い出します。「ハッシュコードをデータベースに保存しないでください」

次のコードは、文字列を同じ順序でソートすることが保証されていますか?

string[] randomStrings = { "Hello", "There", "World", "The", "Secrete", "To", "Life", };
randomStrings.ToList().Sort();
4

5 に答える 5

5

文字列は常にアルファベット順にソートされます。

デフォルト ( string.CompareTo()) では、現在のカルチャの Unicode 比較規則が使用されます。

    public int CompareTo(String strB) {
        if (strB==null) { 
            return 1;
        } 

        return CultureInfo.CurrentCulture.CompareInfo.Compare(this, strB, 0);
    } 
于 2013-01-25T15:56:38.377 に答える
1

比較子を指定しない場合、ソートはアルファベット順にソートするデフォルトの比較子を使用します。したがって、あなたの質問に答えるには、そのコードは常に同じ順序で文字列を返します。

データを別の順序で並べ替えたい場合に、独自の比較演算子を指定できるようにする、並べ替えメソッドへのオーバーロードがあります。

于 2013-01-25T15:58:49.527 に答える
1

のこのオーバーロードは、次のように実装されている文字列の既定の比較子List<T>.Sortを使用します。

このメソッドは、現在のカルチャを使用して単語 (大文字と小文字およびカルチャを区別する) 比較を実行します。単語、文字列、序数による並べ替えの詳細については、 を参照してくださいSystem.Globalization.CompareOptions

于 2013-01-25T15:57:48.887 に答える
0

コードは、配列からコピーして新しいリストを作成し、そのリストを並べ替えてから破棄します。配列はまったく変更されません。

試す:

Array.Sort(randomStrings);
于 2013-01-25T15:56:41.483 に答える
0

あなたが文字列をソートしている間に、私は文化的なものに関連する返信を投稿したかったのですが、Jon はすでにそれを追加しました:-(。はい、デフォルトでアルファベット順、ランダムな文字列が選択されているため、この問題を考慮してもよいと思います。英語以外の外国語 (つまりスペイン語) は結局英語の後に配置されますが、最初の文字は同じです. つまり、これを処理するにはグローバリゼーション名前空間が必要です.

ところで、ティモシー、秘密ではなく秘密です:D

于 2013-01-25T16:08:13.753 に答える