Удаление дубликатов из TStringList

Я анализирую набор данных и присваиваю значения TStringList Я хочу избежать дублирования. Я использую следующий код, но все еще вставляются дубликаты.

  channelList := TStringList.Create;
  channelList.Duplicates := dupIgnore;
  try
    dataset.First;
    while not dataset.EOF do
    begin
        channelList.Add(dataset.FieldByName('CHANNEL_INT').AsString)  ;
        dataset.Next;
    end;

почему добавлены дубликаты?

2 ответов


вы читали http://docwiki.embarcadero.com/Libraries/XE2/en/System.Classes.TStringList.Duplicates, не так ли ?

тогда вы пропустили самое повторяющееся слово там - "сортировка"

channelList.Sorted := true

var F: TField;

channelList := TStringList.Create;
channelList.Sorted := True;
channelList.Duplicates := dupIgnore;

try
   dataset.First;
   F := dataset.FieldByName('CHANNEL_INT');
   while not dataset.EOF do
   begin
      channelList.Add(F.AsString);
      dataset.Next;
   end;

думать из коробки и избегать дубликатов спереди?

Я не знаю, какую БД вы используете, но, например, на SQL server это просто вопрос запроса:

'SELECT DISTINCT CHANNEL_INT FROM MYTABLE';

и затем вы можете добавить результаты TStringList не беспокоясь о дубликатах.