Как удалить дубли

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by aydar, 20 Sep 2010.

  1. aydar

    aydar Member

    Joined:
    12 Nov 2009
    Messages:
    259
    Likes Received:
    6
    Reputations:
    -2
    Вообщем парсю страницу там ид парситься 2 раза, как мне удалить дубли?
     
  2. GhostOnline

    GhostOnline Active Member

    Joined:
    20 Dec 2008
    Messages:
    723
    Likes Received:
    110
    Reputations:
    22
    Куда сохраняешь ИД'ы? Больше инфы давай
    Если в TStringList то просто поставь Sorted в true
     
    1 person likes this.
  3. aydar

    aydar Member

    Joined:
    12 Nov 2009
    Messages:
    259
    Likes Received:
    6
    Reputations:
    -2
    Да вот думаю куда созранять дубли наверно в тстринг
     
  4. 090808

    090808 Member

    Joined:
    15 Mar 2009
    Messages:
    171
    Likes Received:
    46
    Reputations:
    10
    var
    SL:TStringList;
    .....

    SL := TStringList.Create;
    SL.Sorted := true;
    SL.Duplicates := dupIgnore;
    SL.AddStrings(Memo3.Lines);
    Memo3.Clear;
    Memo3.Lines.AddStrings(SL);
    SL.Free;
     
  5. GhostOnline

    GhostOnline Active Member

    Joined:
    20 Dec 2008
    Messages:
    723
    Likes Received:
    110
    Reputations:
    22
    В общем, так:
    PHP:
    var
       
    idsTStringList;
     
    begin
       ids 
    := TStringList.Create;
       
    ids.Sorted := True;
       
    ids.Duplicates := dupIgnore;
       
    ids.Add('test');
       
    ids.Add('test');
       
    ids.Add('test');
      
    // несмотря на то что мы 3 раза добавили
      // одну и ту же строку в list находится только одна
      // строка 'test'
      
    ids.Free;
     
    end;
     
  6. Artist

    Artist Member

    Joined:
    10 Jul 2010
    Messages:
    89
    Likes Received:
    5
    Reputations:
    0
    Вот код удаляет дубли с Memo1
    Code:
    var
    i : integer;
    begin
    i := 0;
    while i < Form1.Memo1.Lines.Count do
    begin
    if Form1.Memo1.Lines.IndexOf(Form1.Memo1.Lines[i]) < i then
    Form1.Memo1.Lines.Delete(i)
    else
    inc(i);
    end;
    end;
    
    Если будет много строк, желательно делать отдельный поток для этого, так как форма будет виснуть.