3

Enumerable.OrderByを使用して並べ替えたい UTF-8 文字列のリストがあります。文字列には、英語、ドイツ語、日本語、またはそれらの組み合わせなど、任意の数の文字セットを含めることができます。

たとえば、入力リストの例を次に示します。

["東京","North 東京", "München", "New York", "Chicago", "大阪市"]

StringComparer.CurrentCultureを使用することが に渡す正しい文字列比較パラメーターであるかどうかについて混乱していますOrderBy()。アプリケーションの現在の文化が、ルールを並べ替えるen-USだけでなく、UTF-8 データを "正しく" 並べ替えたい場合はどうなりますか?en-US

私の混乱は、おそらく、.NET の文字列比較および並べ替えのセマンティクスと完全に一致しない OracleのNLSSORT関数を理解していることに起因しています。たとえば、NLS_SORT=Japanese_M を設定すると、並べ替え可能な列の特定の文字列に一部またはすべての文字が含まれているかどうかに関係なく、ラテン語、西ヨーロッパ言語、および日本語が正しく並べ替えられます。

4

2 に答える 2

4

すべての文化に有効な単一の比較はありません。

言語を検出してそれに応じて選択することを除けば、InvariantCulture が最善の策です。リンクするドキュメントとして、次の点に注意してください。

すべきでないこと: ほとんどの場合、StringComparison.InvariantCulture ベースの文字列操作を使用します。数少ない例外の 1 つは、言語的に意味はあるが文化にとらわれないデータを永続化することです。

強調を加えました。その例外は多かれ少なかれあなたがしていることです。

于 2010-01-06T21:34:40.073 に答える
1

ボールから目を離さないようにしてください。人間がリスト内の文字列を見つけられるようにソートします。英語、ドイツ語、日本語の並べ替え規則を同時に理解するには、熟練した言語学者が必要です。あなたのリストに目を向ける確率はどれくらいですか? リストがローカル カルチャ ルールに従って並べ替えられ、並べ替えがローカライズされていることを常に確認してください。

于 2010-01-06T21:56:52.827 に答える