Сравнить два списка строк

Построчное сравнение двух списков: общие строки, строки только в первом списке, только во втором, объединение без дублей и различия. Учёт регистра, пробелов по краям и пустых строк, сортировка результата. Всё считается в браузере.

Что показать

Строки, которые есть в обоих списках. В результат идёт написание из первого списка

Как сравнивать
Учитывать регистр«Строка» и «строка» станут разными записями. Выключено — считается одной
Игнорировать пробелы в начале и концеОтступы и хвостовые пробелы не влияют на сравнение. Внутри строки пробелы значимы
Игнорировать пустые строкиСтрока из одних пробелов тоже считается пустой — при включённом флажке выше
Сортировать результатПо алфавиту. Выключено — строки идут в порядке появления в списках

Первый список

Второй список

Результат

Вставьте списки — результат появится сразу, нажимать ничего не нужно

Зачем сравнивать списки строк

Два списка почти никогда не совпадают, и вопрос обычно звучит так: что общего, что пропало, что появилось. Так сверяют выгрузку подписчиков с прошлой, список товаров в системе со списком на сайте, перечень файлов в двух папках, артикулы в счёте и в накладной, ID записей до и после миграции. Глазами это делается плохо: на сотне строк человек начинает пропускать совпадения и путать похожие записи, а на паре тысяч бросает совсем.

Инструмент сравнивает списки как множества строк: находит общие записи, показывает строки только из первого и только из второго списка, отдаёт объединение без дублей и различия одним списком. Что считать одной и той же строкой, решают флажки: регистр можно учитывать или не учитывать, пробелы по краям и пустые строки — отбрасывать. Результат выстраивается в исходном порядке или по алфавиту и копируется целиком, а числа над ним показывают размеры списков и долю пересечения — по ней видно, насколько наборы данных вообще похожи.

Ничего не нужно регистрировать и никуда не нужно загружать свои данные: оба списка обрабатываются в браузере и остаются на вашей стороне.

Частые вопросы

Чем это отличается от сравнения двух текстов?

Сравнение текстов показывает, что изменилось между двумя версиями одного документа: строки идут в ряд, рядом с каждой стоит пометка «добавлено», «удалено» или «изменено», а внутри изменённых строк подсвечиваются отдельные символы. Здесь документа нет вовсе — есть два набора записей, и вопрос ставится иначе: какие записи общие для обоих наборов, какие есть только в одном. Ни подсветки, ни номеров строк, ни порядка «до и после» тут не будет: результат — это список, а не разметка версий.

Как учитываются регистр и пробелы?

Три флажка задают, что считать одной и той же строкой. «Учитывать регистр» выключен по умолчанию, поэтому «Москва» и «москва» — одна запись; включите его, если регистр значим, — например, в списке паролей или артикулов. «Игнорировать пробелы в начале и конце» снимает отступы и хвостовые пробелы, в том числе неразрывный: они остаются после копирования из таблиц и писем. Внутренние пробелы не трогаются — «Иван Петров» и «Иван Петров» по-прежнему разные строки, и это правильно: их различие осмысленно.

Что попадает в «Различия»?

Симметричная разница: строки, которые есть ровно в одном из списков. Сначала идут те, что были в первом списке и пропали во втором, потом те, что появились во втором. То есть в одном результате видно и пропажу, и приобретение, тогда как «Только в первом» и «Только во втором» — это те же строки, разложенные по двум отдельным отчётам. Если нужен один список «что не так», берите «Различия»; если важно направление изменений — по отдельности.

Сохраняется ли порядок строк?

Да, по умолчанию результат идёт в том порядке, в каком строки встречались в списках: сначала по первому списку, затем по второму — те строки, которых в первом не было. Флажок «Сортировать результат» переставляет готовый отбор по алфавиту (русский порядок, с учётом регистра). На сам отбор сортировка не влияет: строки сначала выбираются по правилам режима, а потом выстраиваются, поэтому включение сортировки не добавляет и не убирает ни одной записи.

Чем объединение отличается от различий?

Объединение — это все строки обоих списков, каждая по одному разу: оно всегда не меньше каждого из списков и включает в себя общие строки. Различия — только то, что есть в одном списке и нет в другом: общее из них исключено. Короткая проверка: если списки совпадают, объединение равно каждому из них, а различия пусты; если не совпадают ни в одной строке, объединение — это сумма списков, а различия — то же самое, но без сортировки и с сохранением исходного порядка.

Как быстро сравнить списки на десятки тысяч строк?

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

Как обрабатываются повторы внутри одного списка?

Повтор не мешает: каждая строка списка участвует в сравнении один раз, а в результат попадает её первое написание. Поэтому дубли внутри одного списка не удваивают числа в статистике и не появляются в объединении дважды. Если нужно наоборот — увидеть, какие строки повторяются и сколько раз, — это задача инструмента частотного анализа, а не сравнения.

Списки отправляются на сервер?

Нет. Оба списка обрабатываются в браузере на JavaScript: ни одна строка не уходит по сети и не сохраняется. Страница работает и без интернета, а списки можно вставлять любые — от рабочих выгрузок до персональных данных.