Все статьи

Сортировка и удаление дубликатов строк: зачем это нужно

Буква «ё» в русском языке часто заменяется на «е» — по правилам это допустимо почти везде, кроме словарей и имён собственных. Из-за этого строки "все" и "всё" для дедупликатора технически разные строки, хотя многие носители языка воспринимают их как одно и то же слово, написанное по-разному.

Алфавитная сортировка против числовой

Алфавитная (лексикографическая) сортировка сравнивает строки символ за символом как текст. Из-за этого строка "10" окажется перед "9", потому что символ "1" лексикографически меньше "9" — сортировка не «понимает», что это числа. Числовая сортировка, напротив, парсит строки как числа перед сравнением и даёт ожидаемый порядок 9, 10, 11.

Регистр символов при сортировке

В большинстве систем заглавные буквы лексикографически предшествуют строчным (из-за кодировки), поэтому строка "Экран" может оказаться перед "apple" при чувствительной к регистру сортировке. Сортировка без учёта регистра сначала приводит строки к одному регистру для сравнения, сохраняя оригинальный регистр в результате.

Что дедупликация не считает одинаковым

Дедупликация удаляет повторяющиеся строки, сравнивая их посимвольно, а не по смыслу. Кроме очевидных пробелов и регистра, есть менее очевидная ловушка: «ё» и «е» — это разные символы Юникода, поэтому список с обоими вариантами написания одного слова не схлопнется в одну строку без ручной нормализации перед сравнением.

Зачем это нужно

  • Убрать повторяющиеся записи из списка email-адресов или URL перед импортом.
  • Отсортировать список версий или ID числово, а не текстово.
  • Быстро сравнить два набора данных, приведя оба списка к одинаковому отсортированному виду.

Естественная сортировка (natural sort)

Естественная сортировка — компромисс между алфавитным и числовым подходами: она распознаёт последовательности цифр внутри строки как числа, а остальные символы сравнивает как текст. Благодаря этому file2.txt окажется перед file10.txt, хотя формально это строки, а не самостоятельные числа, — удобно для названий файлов или версий с текстовым префиксом.

Попробовать инструмент