Блог по программированию в среде Delphi

Поиск по блогу

Есть идея по созданию интересной программы?

Опиши тут и я по возможности постараюсь это реализовать специально для тебя! Без $ ))

вторник, 20 апреля 2010 г.

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

Пример использования стандартного функционала класса  TStringList для удаления дубликатов из переменной t

var
  t:TStringList;
begin
  t:=TStringList.Create;
  t.Add('1');
  t.Add('2');
  t.Add('1');
  t.Add('3');
  t.Add('2');
  t.Add('3');
  Label1.Caption:=IntToStr(t.Count);//количество строк в списке 6
  t.Sorted:=True;
  t.Duplicates:=dupIgnore;
  t.Clear;
  t.BeginUpdate;
  t.Add('1');
  t.Add('2');
  t.Add('1');
  t.Add('3');
  t.Add('2');
  t.Add('3');
  t.EndUpdate;
  Label2.Caption:=IntToStr(t.Count);//количество строк в списке 3

что нам и было необходимо.
кому лень писать, что то свое есть готовая процедура для этих целей

//remove duplicate strings from the string list
 procedure RemoveDuplicates(const stringList : TStringList) ;
 var
   buffer: TStringList;
   cnt: Integer;
 begin
   stringList.Sort;
   buffer := TStringList.Create;
   try
     buffer.Sorted := True;
     buffer.Duplicates := dupIgnore;
     buffer.BeginUpdate;
     for cnt := 0 to stringList.Count - 1 do
       buffer.Add(stringList[cnt]) ;
     buffer.EndUpdate;
     stringList.Assign(buffer) ;
   finally
     FreeandNil(buffer) ;
   end;
 end;

пример использования

var
   sl : TStringList;
   cnt : integer;
 begin
   Randomize;
   sl := TStringList.Create;
   try
     for cnt := 1 to 1000 do
       sl.Add(IntToStr(Random(2000))) ;
     ShowMessage('With duplicates: ' + #13#10 + IntToStr(sl.Count)) ;
     RemoveDuplicates(sl) ;
     ShowMessage('Without duplicates: ' + #13#10 + IntToStr(sl.Count)) ;
   finally
     sl.Free;
   end;
 end;

 процедура и пример ее использования были взяты с сайта http://delphi.about.com/ только в целях сохранения и передачи информации))

3 комментария:

  1. Ну конечно куда мне до вас. напишите ваш вариант посмотрим.

    ОтветитьУдалить
  2. with StringList do
    begin
    Sorted := True;
    Duplicates := dupIgnore;
    end;

    ОтветитьУдалить