2013-02-19 20 views
16

文字比較と文字比較に関連する質問があります。個々の文字の文字列比較とアルファベット順

文字>および0(ゼロ)には、それに応じて小数の値が62および48になります。

私は、次のコードで2つの文字を比較すると、私は(正しい)値Trueを取得

Console.WriteLine('>' > '0'); 

私は、次のコードで2つの1文字の文字列を比較すると、私は値-1を得ることを示しています">"、 "0"(デフォルトの培養は英語である)未満で

Console.WriteLine(string.Compare(">", "0")); 

"3"、 "1"(5149コードVALUの比較一方ES)次のコードに1を返す(予想通り)

Console.WriteLine(string.Compare("3", "1")); 

また、string.Compare(string str1, string str2)ドキュメントは言う:

比較は、ケーシングルールとして培養固有 情報を取得するために、現在の培養を使用してアルファベット順の 個々の文字

あなたは説明することができますか(またはいくつかのドキュメントへの参照を提供する)比較は実施される。どうすればアルファベット順の各文字が計算されますか?

答えて

14

'>''0'の文字を比較すると、その順序の値が比較されます。

Console.WriteLine(string.Compare(">", "0", StringComparison.Ordinal)); 
    Console.WriteLine(string.Compare(">", "0", StringComparison.InvariantCulture)); 
    Console.WriteLine(string.Compare(">", "0", StringComparison.CurrentCulture)); 

、現在のカルチャがデフォルトで使用されている、というには「アルファベット順」の文字列をソートすることを目的ソート順があります。

は、文字列の比較から、同じ動作を取得するには、序数の文字列の比較タイプを供給厳密には字句順で、アルファベット順に定義されています。

0

str2str1を比較しているため、-1が返されます。たとえば、「62と等しい48」です。いいえ、それは62より小さく、-1を返します。パラメータの順序を読むときに意味が少し混乱します

+0

[MSDN(http://msdn.microsoft.com/en-us/library/84787k22.aspx)「はString.Compare(ストラ、STRB)と言うSTRAが少ないですstrBより。たとえば、 'string.Compare(" A "、" B ")'は '-1'を返します。' 'A ''は '' B' ''より小さい。なぜ ""> "' "0" 'よりも小さいのですか? – dtb

+0

私は質問を更新しました。「3」と「1」を比較すると、「3」にコード51があり、「1」にコード49があります(期待通り)。それはあなたの説明と一致しません。 – Alexandar

+0

@Alexandar良い点。私はPeteKirkhamが私よりもそれに答えたと思う – DiskJunky

17

文字列のソート順は、使用するカルチャによって異なります。次のように

' - ! " # $ % & () * , ./: ; ? @ [ 
\ ]^_ ` { | } ~ + <=> 0 1 2 3 4 5 6 
7 8 9 a A b B c C d D e E f F g G h H i 
I j J k K l L m M n N o O p P q Q r R s 
S t T u U v V w W x X y Y z Z 

StringComparer.Ordinal種類の同じ文字列を::

それはあなたが望むもののように聞こえる
! " # $ % & ' () * + , - ./0 1 2 3 
4 5 6 7 8 9 : ; <=> ? @ A B C D E F G 
H I J K L M N O P Q R S T U V W X Y Z [ 
\ ]^_ ` a b c d e f g h i j k l m n o 
p q r s t u v w x y z { | } ~ 
+5

あなたはあなたの現在の文化が何であるかを私たちに知らせず、それは残念です。私は '' fy-NL ''(西フリジア語(オランダ))ではないと言うことができます。なぜなら、文字「y」は「i」の隣にあるからです。また、 '' et-EE ''(エストニア語(エストニア語))にすることもできません。これは '' z''が '' s''の次にあるからです。 –

+0

ユーザーdtbはSOのプロファイルに従ってドイツにあります。 –

2

はとの比較である私のマシン上で次のように

StringComparer.CurrentCultureは、次の1文字の文字列をソート文化固有の規則を使用しないでください。あなたはStringComparisonを試しましたか?序: - ゼロ未満 -

Console.WriteLine(string.Compare(">", "0", StringComparison.Ordinal)); // returns a positive number