2017-04-24 18 views
1

- と/を含む文字列をソートしようとしました。しかし、私は、出力Cでの特殊文字ソート問題の文字列

Console.WriteLine(@"a-b".CompareTo(@"a/b")); 
Console.WriteLine(@"-b".CompareTo(@"/b")); 
Console.WriteLine(@"a-".CompareTo(@"a/")); 
Console.WriteLine(@"-".CompareTo(@"/")); 
Console.WriteLine(@"-/".CompareTo(@"/-")); 
Console.WriteLine(@"--".CompareTo(@"//")); 

私は、すべての出力が1は、私がかなっここで起こっ誤解したのされなければならない期待している間、出力は

1 
1 
-1 
-1 
1 
-1 

で理解できないのですか?おかげ

+2

'@ - ==のCompareTo(@ "/")を-1'' -'は '/'の前に起こることを意味しています ""。語彙順 –

+2

それはあなたが[docsを読む](https://msdn.microsoft.com/en-us/library/fkw3h78a(v = vs.110).aspx) – Jonesopolis

+0

の場合、その理由は「ab」です。 CompareTo(@ "a/b")は@ "a - "の間に1を返します。CompareTo(@ "a /")は-1を返します – Mavershang

答えて

2

MSDNから:

文字セットは、無視文字が含まれます。 メソッドは、 カルチャーセンシティブ比較を実行するときに、このような文字を考慮しません。たとえば、の場合、.NET Framework 4以降で実行される の場合、 "動物"と "ani-mal"(ソフトハイフンまたはU + 00ADを使用)を比較すると、2つの数字が 文字列はと等価です。

つまり、文化に敏感な方法で比較すると、-は無視されます。

これはあなたの予想結果(すべて否定)与える:

Console.WriteLine(String.CompareOrdinal(@"a-b", @"a/b")); 
Console.WriteLine(String.CompareOrdinal(@"-b",@"/b")); 
Console.WriteLine(String.CompareOrdinal(@"a-",@"a/")); 
Console.WriteLine(String.CompareOrdinal(@"-",@"/")); 
Console.WriteLine(String.CompareOrdinal(@"-/",@"/-")); 
Console.WriteLine(String.CompareOrdinal(@"--",@"//")); 
+0

キーボード上のハイフンと '\ u00AD 'が同じではないことに言及する価値があります。たとえば、次のように1を返します。 '@" \ u00AD ".CompareTo(@" - ")' –