Как отсортировать массив символов в алфавитном порядке, чтобы заглавные и строчные буквы одной и той же буквы были рядом друг с другом? - PullRequest
0 голосов
/ 03 октября 2018

Например,

Входной массив: 'a', 'b', 'B', 'A'

Вывод с Array.Sort (): 'A', 'B', 'a', 'b'

Желаемый результат: 'A', 'a', 'B', 'b'

Я понимаю, почему 'A' считается ниже, чем 'a', но я хочу, чтобы он сортировался по алфавиту, а не по соответствующим целым числам символов.

Существует ли класс Comparer, который решит проблему как второй аргумент для Array.Sort ()?

Ответы [ 2 ]

0 голосов
/ 04 октября 2018

Вы можете использовать LINQ для создания нового char Array с правильным порядком:

var ans = chars.OrderBy(Char.ToUpper).ThenBy(c => c).ToArray();
0 голосов
/ 03 октября 2018

Существует ли класс Comparer, который решит проблему как второй аргумент для Array.Sort ()?

Для строк вы хотите использовать OrdinalIgnoreCase или InvariantCultureIgnoreCase, в зависимости от того,Вы заботитесь о чувствительности культуры или нет.См .:

Что обычно лучше всего использовать - StringComparison.OrdinalIgnoreCase или StringComparison.InvariantCultureIgnoreCase?

Для символов я не знаю встроенного компаратора, которыйделает это, но это легко написать свой собственный.См.

Как правильно сравнивать регистр игнорирования символов?

Обратите внимание, что Array.Sort является мутантной сортировкой;если вы хотите сортировку без мутаций, выполните OrderBy на ToUpper или ToUpperInvariant.Обратите внимание, что здесь есть подводные камни;см.

Как отсортировать массив символов в алфавитном порядке, чтобы заглавные и строчные буквы одной и той же буквы были рядом друг с другом?

Обратите внимание, что этонеясно, является ли ваше намерение, чтобы A и a были равными - в этом случае A, a, A было бы законным порядком, поскольку равные вещи равны илихотите ли вы заказать в пределах a и A.Опять будь осторожен.Если это то, что вы хотите, то вам придется сделать ThenBy также.

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