AW: Doppel schnell aus Liste löschen.
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Da man weiß, daß das
Delphi-Quellcode:
auf jedenfall funzt, kann man so auf Plausibilität prüfen.
procedure TFloatPoints.DeleteDoubles;
var I, J: integer; begin for I := FCount - 2 downto 0 do for J := FCount - 1 downto I + 1 do if SameFloatPoint(FItems[I], FItems[J]) then Delete(J); end;
Delphi-Quellcode:
procedure TFloatPointsTestForm.CompareButtonClick(Sender: TObject);
begin CompareButton.Enabled := false; Application.ProcessMessages; FList2.Sort; if FList1.Compare(FList2) then StatusLabel.Caption := 'OK' else StatusLabel.Caption := 'Failed'; end; |
AW: Doppel schnell aus Lise löschen.
Zitat:
Zitat:
|
AW: Doppel schnell aus Liste löschen.
Ich weiß, ihr glaubt mir nicht, aber das hier funktioniert und ist zudem noch schneller:
Delphi-Quellcode:
Das Ergebnis ist jedenfalls beim Testprojekt stets 'OK'. Aber ich scheine mir hier den Mund fusselig zu reden.
Procedure TFloatPoints.DejainRemove;
var n,i : Integer; r : TFloatPoint; Begin Sort(); n := 0; r := FItems[n]; for i:=1 to FCount-1 do if not SameFloatPoint(fitems[i],r) then begin inc(n); FItems[n]:=fItems[i]; r := FItems[n]; End; fCount := n+1; End; Auf jeden Fall ist das hier einfach Quark (tut mir leid) Zitat:
|
AW: Doppel schnell aus Lise löschen.
Zitat:
|
AW: Doppel schnell aus Liste löschen.
Zitat:
Delphi-Quellcode:
function SortCompareXY(const A, B: TFloatPoint): integer;
begin Result := SortCompareX(A, B); if Result = 0 then Result := SortCompareY(A, B); end; procedure TFloatPoints.RemoveDoubles2; var I, J: integer; P: TFloatPoint; begin QuickSort(0, FCount - 1, SortCompareXY); J := 0; P := FItems[J]; for I := 1 to FCount - 1 do if not SameFloatPoint(FItems[I], P) then begin Inc(J); FItems[J] := FItems[I]; P := FItems[J]; end; FCount := J + 1; end; |
AW: Doppel schnell aus Liste löschen.
habe jetzt nichts gelesen was hier so posted wurde, aber ich würde sowieso mit quicksort alles sortieren und dann einmel durchlaufen um alle doppelten einträge rauszuwerfen..
O(n*log(n)) + 1x durchlaufen .. dauert bestimmt nicht lange bei nur 100k |
AW: Doppel schnell aus Liste löschen.
Nicht schon wieder, dieser Thread verfolgt mich langsam. :)
Der Thread beruhte auf einem Fehler in meinem Quicksort. Man kann Koordinaten "ganz normal" sortieren. Das hätte man auch um 03:57 bemerken können (Der Beitrag direkt über deinem). |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:52 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz