Усі статті

Сортування та видалення дублікатів рядків: навіщо це потрібно

Сортування рядків і видалення дублікатів здаються тривіальними задачами, поки не натрапиш на дві типові пастки: різницю між алфавітним і числовим сортуванням, і питання, що саме вважати дублікатом.

Алфавітне сортування проти числового

Алфавітне (лексикографічне) сортування порівнює рядки символ за символом як текст. Через це рядок "10" опиниться перед "9", бо символ "1" лексикографічно менший за "9" — сортування не «розуміє», що це числа. Числове сортування, навпаки, парсить рядки як числа перед порівнянням і дає очікуваний порядок 9, 10, 11.

Реєстр символів при сортуванні

У більшості систем великі літери лексикографічно передують малим (через ASCII-коди), тому рядок "Zebra" може опинитися перед "apple" при чутливому до регістру сортуванні. Сортування без урахування регістру спершу приводить рядки до одного регістру для порівняння, зберігаючи оригінальний регістр у результаті.

Видалення дублікатів

Дедублікація видаляє повторювані рядки, залишаючи по одному унікальному входженню. Важливий нюанс — чутливість до регістру та пробілів: рядки "Text" і "text " (із зайвим пробілом) технічно різні й не будуть об’єднані без додаткової нормалізації.

Навіщо це потрібно

  • Прибрати повторювані записи зі списку email-адрес чи URL перед імпортом.
  • Відсортувати список версій чи ID числово, а не текстово.
  • Швидко порівняти два набори даних, привівши обидва списки до однакового відсортованого вигляду.

Природне сортування (natural sort)

Природне сортування — компроміс між алфавітним і числовим підходами: воно розпізнає послідовності цифр усередині рядка як числа, а решту символів порівнює як текст. Завдяки цьому file2.txt опиниться перед file10.txt, хоча формально це рядки, а не самостійні числа, — зручно для назв файлів чи версій з текстовим префіксом.

Спробувати інструмент