2012-03-13 39 views
3

一個奇怪的問題,我的代碼是:約string.compare方法

static void Main(string[] args) 
{ 
    Console.WriteLine(string.Compare("-", "a"));//output -1 
    Console.WriteLine(string.Compare("-d", "a"));//output 1 
    Console.Read(); 
} 

誰可以告訴我爲什麼嗎?

回答

4

默認情況下,字符串比較使用文化特定設置。這些設置允許將不同的訂單和權重應用於字母和符號;例如,當使用大多數文化設置進行排序時,「簡歷」和「簡歷」將顯得相當接近,因爲「é」在「e」之後,「f」之前排列,即使Unicode代碼頁放置得很好在英文字母的其餘部分之後。類似地,不是空白的符號在字符串中佔據一個位置,但被認爲是「連接」的,如破折號,斜槓等,被賦予低「重量」,因此它們只被認爲是繫帶破壞者。這意味着「a-b」會在「ab」之後和「ac」之前排序,因爲短劃線不如字母重要。

你認爲你想要的是「有序排序」,其中字符串根據字符串中的第一個差異進行排序,基於Unicode代碼頁中不同字符的相對序號位置。如果「 - 」也會出現在「a」之前,這將在「a」之前放置「-d」,因爲短劃線被認爲是完整的「字符」,並與同一位置的字符「a」進行比較。但是,在真實單詞列表中,當按順序排列的列表中時,這將按順序放置「重做」,「簡歷」,「松香」,「盧布」,「重做」和「簡歷」 ,這在上下文中可能沒有意義,當然也不適用於非英語的人。

+0

+1:目前爲止的最佳答案 – 2012-03-13 01:54:48

3

它比較對方內的字符的位置。換句話說,「 - 」在之前(小於)「a」。

String.Compare()使用字排序規則比較時。請注意,這些都是相對的位置。這裏有一些來自MSDN的信息。

條件

負:STRA小於STRB
零:STRA等於STRB
正:STRA大於STRB

上述比較適用於本超載:

public static int Compare(
    string strA, 
    string strB 
)