Текст и повседневные инструменты · Текстовый инструментарий
Почему отсортированные списки различаются на разных компьютерах: объяснение сортировки с учетом локали
· Почему это важно
текстовые инструменты сортировка локали
Объясняет разницу между порядком кодовых точек и сопоставлением локали, почему буквы ä, é и прописные буквы располагаются в разных местах на разных машинах и как без сюрпризов делиться отсортированным списком.
Тот же список, два приказа — сорт коллеги ставит Ангстрема куда-то еще, и никто из вас не прав.
Руководитель группы может отправить один и тот же список имен участников коллегам в двух странах и получить два возможных алфавитных порядка. Имена, содержащие буквы с ударением, являются обычным предметом разногласий, поскольку расположение в алфавите определяется не только видимой основной буквой. В сравнении участвует среда браузера.
Ни один из коллег не должен допускать ошибок вручную. Практическая проблема заключается в том, что «сортировка по алфавиту» не определяет единую универсальную последовательность для многоязычного текста. Прежде чем просматривать добавления или удаления, согласитесь, какой выполненный заказ является авторитетным; в противном случае построчное сравнение покажет движение, вызванное только отдельными решениями о сортировке.
Порядок кодовых точек — почему наивная сортировка ставит каждую заглавную букву перед каждой строчной буквой и переносит буквы с диакритическими знаками в конец
В схеме описана простая сортировка кодовых точек, в которой заглавные буквы помещаются перед строчными буквами, а в конце — акцентированные буквы, но это не то, что реализует Text Toolkit. Его функция `sortLines` копирует строки и сравнивает каждую пару с `localeCompare`, поэтому учитываются правила сортировки браузера, а не необработанные числа символов.
Обработка регистров также явно указана в параметрах функции. При сортировке с учетом регистра требуется чувствительность `variant`, тогда как режим без учета регистра по умолчанию запрашивает чувствительность `base`. Это может привести к тому, что формы с разными регистрами или акцентами будут сравниваться как эквивалентные, оставляя их относительное расположение зависимым от стабильного порядка, подаваемого в сортировщик, а не вынуждая заглавные буквы помещать в отдельный блок.
ToolAcre не использует простой порядок кодовых точек: он вызывает localeCompare для каждой строки
При сравнении передается `undefined` в качестве языкового стандарта, что запрашивает среду выполнения использовать поведение языкового стандарта по умолчанию. Источник не обещает шведского, немецкого, английского или любого другого именованного параметра сортировки, а интерфейс, представленный этой функцией, не имеет аргумента локали. Таким образом, публикация здесь точных национальных постановлений выйдет за рамки доказательств реализации.
Эта граница объясняет, почему результаты могут отличаться, не доказывая, какая именно настройка вызвала конкретную разницу. Запишите браузер и среду, если воспроизводимость имеет значение, но не делайте вывод о локали по позиции одного акцентированного имени. Надежным фактом является то, что набор инструментов делегирует заказ `localeCompare` со значением по умолчанию во время выполнения, а не закрепляет общий язык.
Браузер предоставляет локаль по умолчанию, но набор инструментов не предлагает средства выбора локали.
Цифровые прогоны также получают особое внимание. Функция по умолчанию присваивает `numeric` значение true и передает этот параметр `localeCompare`. Следовательно, список, содержащий `item2` и `item10`, предназначен для размещения меньшего числового ряда первым в порядке возрастания вместо сравнения символа `1` в десяти числах с символом `2` в двух.
Заполнение нулями остается полезным, когда данные должны пройти через другой сортировщик, поведение которого неизвестно, но здесь не требуется получать упорядочение с учетом чисел. Если вместо этого требуется точный лексический порядок, базовая функция поддерживает отключение числового сравнения. Важный урок — документировать выбранный вариант, а не предполагать, что каждая алфавитная команда одинаково обрабатывает встроенные цифры.
По умолчанию Digit выполняет числовую сортировку, поэтому элемент 2 предшествует элементу 10.
Для примера поместите `Ångström`, `Ana`, `Émile`, `item2` и `item10` в отдельные строки, а затем отсортируйте один раз в браузере, выбранном командой. Сохраните этот вывод как ссылку. В этой статье намеренно не публикуется ожидаемый порядок акцентированных имен второго браузера, поскольку в репозитории нет закрепленной локали, устанавливающей его.
Если у коллеги есть другой заказ, сравните два заполненных текста с построчной разницей. Реализация diff выравнивает точно равные строки в таблице самых длинных общих подпоследовательностей и помечает несовпадающие строки как добавленные или удаленные. Он достоверно сообщает о структурных изменениях, но не объясняет, какое сравнение локали поместило имя в ту или иную позицию.
Рабочий пример: сравнить один заказ, созданный браузером, вместо того, чтобы придумывать два результата локали.
Простейшее правило совместной работы — выполнить сортировку один раз и поделиться полученными строками, а не просто неотсортированными входными данными и инструкцией нажать «Сортировать». Результат в виде открытого текста сохраняет решение, которое фактически было рассмотрено. Получатели могут искать, комментировать или сравнивать этот артефакт, не запрашивая у своих браузеров воссоздание порядка, зависящего от среды.
Сохраните исходный список, если происхождение имеет значение. Отсортированная копия представляет собой презентацию для просмотра, тогда как оригинал может содержать значимый порядок прибытия или источника. Присвоение имени эталонному файлу и запись о том, была ли сортировка по возрастанию, с учетом регистра или по цифрам, превращает расплывчатую алфавитную операцию в повторяемую передачу команды.
Что здесь не распространяется — параметры числовой сортировки, обратный порядок и сортировка по определенному столбцу.
В исходной схеме говорится, что параметры числовой сортировки и обратный порядок не рассматриваются, но источник противоречит этому ограничению. `sortLines` принимает числовой параметр и направление возрастания или убывания, а `reverseLines` может изменить текущую последовательность строк. Эти возможности не следует описывать как отсутствующие в текстовой логике инструментария.
Сортировка по определенному столбцу действительно находится за пределами этой функции. Каждая полная строка является значением сравнения, поэтому такая строка, как `Paris, Ana`, сортируется с начала, а не по имени после запятой. Анализируйте структурированные строки с помощью подходящего инструмента обработки данных, когда поля имеют значение; сортировка строк не должна претендовать на понимание столбцов.
Инструментарий охватывает числовую сортировку и обратный порядок, но не сортировку по столбцу.
Сортировка с учетом локали полезна, поскольку человеческие алфавиты невозможно безопасно свести к одному правилу необработанных чисел символов. Это также означает, что незакрепленная локаль по умолчанию не является контрактом на межмашинную воспроизводимость. Text Toolkit использует параметры сортировки браузера, по умолчанию использует сравнения без учета регистра и с учетом числовых значений, а также может изменить запрошенное направление.
Для команды, охватывающей среду, сделайте выходные данные контрактом: выберите один сеанс браузера, установите нужные параметры, отсортируйте и распространите именно этот текст. Когда появится другой порядок, сравните артефакты, прежде чем обсуждать, какой алфавит правильный. Источник поддерживает объяснение механизма, в то время как сохраненный результат обеспечивает стабильную последовательность, которую сама реализация не гарантирует глобально.