По умолчанию в сравнении строк используются настройки для конкретной культуры. Эти настройки позволяют варьировать порядок и весы для применения к буквам и символам; например, «резюме» и «резюме» будут выглядеть довольно близко друг к другу при сортировке с использованием большинства настроек культуры, потому что «é» упорядочивается сразу после «e» и задолго до «f», хотя кодовая страница Unicode помещается в нуль после остальной части английского алфавита. Точно так же символы, которые не являются пробелами, занимают позицию в строке, но считаются «соединительными», как тире, косые черты и т. Д., Дают низкий «вес», так что они считаются только тай-брейками. Это означает, что «a-b» будет сортироваться сразу после «ab» и до «ac», потому что тире менее важно, чем буквы.
Что вы считаете нужным, это «порядковая сортировка», где строки сортируются на основе первой разницы в строке, основанной на относительных порядковых позициях различных символов в кодировке Unicode. Это означало бы «-d» до «a», если «-» также появится перед «a», потому что тире считается полным «символом» и сравнивается с символом «a» в том же положении. Однако в списке реальных слов в этом порядке будут помещены слова «redo», «resume», «rosin», «ruble», «re-do» и «résumé» в том порядке, когда в отсортированном по порядку списке , что может не иметь смысла в контексте и, конечно же, не для не говорящего на английском языке.
+1: лучший ответ до сих пор –