Delphi: Список уникальных значений

Задача: Нужно получить строковый список уникальных значений.
Инструментарий: Delphi
Решение: Для решения данной задачи — можно воспользоваться классом TSringList, в котором есть весь функционал необходимый для игнорирования дубликатов значений.
Для того чтобы при добавлении нового значения в список игнорировались дубликаты  — он должен быть отсортирован и установлено свойство Duplicates = dupIgnore. Рассмотрим пример:

var
  UniqueList : TStringList;
begin
  UniqueList := TStringList.Create;
  UniqueList.Sorted := True;
  UniqueList.Duplicates := dupIgnore;
...
  UniqueList.Add();
...
  FreeAndNil(UniqueList);
end;

Свойство Duplicates может принимать следующие значения:

Значение Описание
dupIgnore Игнорировать попытки добавить повторяющиеся строки в список.
dupError Вызвать исключение EStringListError, когда делается попытка добавления повторяющихся строки в список.
dupAccept Позволяет добавлять дубликаты в отсортированном списке.

Также для проверки регистра строк можно использовать свойство CaseSensitive

Более подробно cо свойствами TStringList’а можно ознакомится тут

Delphi: Список уникальных значений: 4 комментария

  1. Олександр Андрощук

    Я написал тестовый пример, в котором добавлял 1млн. уникальных значений. Добавление заняло уйму времени, но все же все добавилось, и ясно почему, чем больше уникальных значений, тем дольше выполняется поиск. Если брать по производительности, тогда Dictionary<> выигрывает в разы, поскольку использует ключ в виде хеша. Так что все сводится к условию задачи и какой объем данным мы будем использовать. Если интересно — могу описать бенчмарк в виде статьи.

  2. Roman Savenko

    Олександр Андрощук не пишите ерунды, десятки тысяч и гайки стринглисту. даже на сотню тысяч записей , без разницы уникальных или нет. и стринглист не вытянет.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *