о методе string.compare - PullRequest
       9

о методе string.compare

3 голосов
/ 13 марта 2012

странный вопрос, мой код:

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

Кто может сказать мне, почему?

Ответы [ 3 ]

4 голосов
/ 13 марта 2012

По умолчанию для сравнения строк используются специфичные для культуры настройки.Эти настройки позволяют применять различные порядки и веса к буквам и символам;например, «резюме» и «резюме» будут отображаться довольно близко друг к другу при сортировке с использованием большинства настроек культуры, поскольку «é» упорядочивается сразу после «e» и намного раньше «f», даже несмотря на то, что кодовая страница Unicode размещает «é»после остального английского алфавита.Аналогично, символы, которые не являются пробелами, занимают позицию в строке, но считаются «связующими», как тире, косые черты и т. Д. Имеют малый «вес», так что они рассматриваются только как прерыватели.Это означает, что «ab» будет отсортировано сразу после «ab» и перед «ac», потому что тире менее важен, чем буквы.

То, что вы хотите, - это «порядковая сортировка», где строки сортируются на основе первого различия в строке на основе относительных порядковых позиций различных символов в кодовой странице Unicode.Это поместит «-d» перед «а», если «-» также будет стоять перед «а», потому что тире считается полным «символом» и сравнивается с символом «а» в той же позиции.Тем не менее, в списке реальных слов это поместило бы слова «повторить», «возобновить», «канифоль», «рубль», «повторно сделать» и «резюме» в таком порядке, когда в отсортированном по порядковому порядку списке, что, возможно, не имеет смысла в контексте, и, конечно, не для не говорящего по-английски.

3 голосов
/ 13 марта 2012

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

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

Значение : Состояние Отрицательный: strA меньше strB Ноль: strA равно strB Положительный: strA больше strB

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

public static int Compare(
    string strA,
    string strB
)
1 голос
/ 13 марта 2012

- Считается как особый случай при сортировке .NET Framework. Этот ответ имеет детали: https://stackoverflow.com/a/9355086/1180433

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...