Вы можете предположить, что строки просто сравниваются символ за символом, принимая их порядковые значения.
Это не так.Сортировка гораздо сложнее.
Фактически, вы можете увидеть то же самое в других средах, таких как Windows PowerShell:
PS Home:\> '-' -gt 'j'
False
PS Home:\> '-k' -gt 'jk'
True
PS Home:\> '''' -gt 'u'
False
PS Home:\> '''v' -gt 'uv'
True
Вполне может быть, что порядок строктакже зависит от вашей локали.
Что касается вашей конкретной проблемы, приведите цитату из Unicode Collation Algorithm (UTS # 10):
Порядок сортировки в общем случае не сохраняется при операциях конкатенации или подстроки.
Например, тот факт, что x меньше y, не означает, что x + z меньше y + z, поскольку символыможет образовывать сокращения через границы подстроки или конкатенации.В итоге:
x x xz zx
и для устранения неправильного понимания вы, вероятно, под:
Сортировка не является кодомТочечный (двоичный) порядок.
Простым примером этого является тот факт, что заглавная буква Z стоит перед строчными a в кодовых диаграммах.Как отмечалось ранее, новички могут жаловаться на то, что конкретный символ Unicode «не в нужном месте в кодовой диаграмме». Это неправильное понимание роли кодировки символов в сопоставлении.В то время как стандарт Unicode не размещает символы так, чтобы двоичное упорядочение было нечетным, единственный способ получить лингвистически правильный порядок - использовать чувствительность к языку, а не двоичное упорядочение.