Einzelnen Beitrag anzeigen

marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#8

Re: Dubikate in TStringGrid anzeigen (den Rest rausschmeißen

  Alt 14. Aug 2005, 12:27
Sharky, du hast tatsächlich einen Fehler in meiner Routine gefunden und alzaimar hat ihn korrekt erklärt. Vielen Dank euch beiden.

Delphi-Quellcode:
procedure KeepDuplicates(sl: TStringList; allDuplicates: boolean = false);
var
  i, j, dist: integer;
begin
  if not sl.Sorted then
    sl.Sort;
  for i := sl.Count - 1 downto 0 do begin
    j := i; // "j := sl.IndexOf(sl[i])" würde einen sporadischen Fehler produzieren
    while (j > 0) and (sl[j - 1] = sl[j]) do
      Dec(j);
    dist := i - j;
    if (dist = 0) or (not allDuplicates and (dist > 1)) then
      sl.Delete(i);
  end;
end;
Die Routine stammt aus einer Sammlung von Mengenoperationen auf Strings. Benutzt habe ich sie nie, aber der zugehörige Testcode erzeugte seine Testdaten so:

Delphi-Quellcode:
for i := 1 to 20 do
  sl.Add(IntToStr(Random(30)));
Was soll ich sagen, damit produzierte der Code in den ersten Durchläufen korrekte Ergebnisse. Ich werde meinen Testcode wohl etwas verfeinern müssen...

Verlegene Grüße vom marabu

PS: Fehler nach Hinweis von alzaimar korrigiert
  Mit Zitat antworten Zitat