2012-03-13 2 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. Это означало бы «-d» до «a», если «-» также появится перед «a», потому что тире считается полным «символом» и сравнивается с символом «a» в том же положении. Однако в списке реальных слов в этом порядке будут помещены слова «redo», «resume», «rosin», «ruble», «re-do» и «résumé» в том порядке, когда в отсортированном по порядку списке , что может не иметь смысла в контексте и, конечно же, не для не говорящего на английском языке.

+0

+1: лучший ответ до сих пор –

3

Он сравнивает положение символов внутри друг друга. Другими словами, «-» предшествует (меньше) «а».

String.Compare() использует слово сортировать правила при сравнении. Имейте в виду, что это все относительные позиции. Вот некоторая информация от MSDN.

Значение: Состояние

Negative: Стр меньше STRB
Зеро: Стр равен STRB
Positive: Стр больше STRB

выше сравнение относится и к этой перегрузки:

public static int Compare(
    string strA, 
    string strB 
) 
Смежные вопросы