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

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

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

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

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

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

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

UPD: 08.2016

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

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

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

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