Array.sort сортирует значение пути преобразования элемента в строку, а затем делать лексикографический вид.
Теперь, по лексикографической сортировке все, что они означают, состоит в том, что они сравнивают символы строки один за другим до тех пор, пока не будет найден несоответствующий символ. Позиция несоответствующего символа в наборе символов (где буквы упорядочены по алфавиту) определяет ранг строки.
f_a100_
^
f_a1_
^
f_a10_
^
Просмотреть первый несимметричный символ. Здесь _
больше 0
(проверьте их коды ascii), поэтому f_a100_
и f_a10_
выше f_a1_
. В настоящее время между этими двумя мы идем к следующему символу
f_a100_
^
f_a10_
^
Здесь, применяя ту же логику f_a100_
приходит первым. Таким образом, окончательный заказ ["f_a100_", "f_a10_", "f_a1_"]
Этот порядок сортировки представляется логичным для простых строк. Но для некоторых других случаев, подобных вашим, это работает странно из-за того, как упорядочены кодировки. Чтобы получить желаемое поведение, вы должны написать свою собственную функцию сравнения, которая удаляет номерную часть и возвращает положительное, отрицательное значение или значение 0, как показано в примере.
Потому что это строка сортировки ... – epascarello
ее либо колдовство, либо колдовство, но определенно не оба – Rooster
Конечно, но нет никакой разницы, кроме префикса ... В каждом примере это сортировка по умолчанию по умолчанию. – gazdac