![]() |
Liste Sortieren nach 2 Parametern
Ich möchte eine TList Sortieren und zwar habe ich folgende TList
Delphi-Quellcode:
und ich will jetzt folgendes Ergebnis haben.
PData = ^TData;
TData = Record X,Y : Longint; End; Y X 1 1 1 2 1 3 2 1 2 2 u.s.w wie kann ich das machen. |
Re: Liste Sortieren nach 2 Parametern
Den Vergleichsalgorithmus entsprechend anpassen
|
Re: Liste Sortieren nach 2 Parametern
Zitat:
|
Re: Liste Sortieren nach 2 Parametern
Der Methode Tlist.Sort() kannst du eine Vergleichsfunktion mitgeben.
|
Re: Liste Sortieren nach 2 Parametern
Delphi-Quellcode:
function CompareData (Data1, Data2 : Pointer) : Integer
begin if PData(Data1)^.X = PData(Data2)^.X then begin if PData(Data1)^.Y = PData(Data2)^.Y then Result := 0 else if PData(Data1)^.Y > PData(Data2)^.Y then Result := 1 else Result := -1; end else if PData(Data1)^.X > PData(Data2)^.X then Result := 1 else Result := -1; end; |
Re: Liste Sortieren nach 2 Parametern
Oder etwas kompakter:
Delphi-Quellcode:
function CompareData (Data1, Data2 : Pointer) : Integer
begin Result := PData(Data1)^.X - PData(Data2)^.X; If Result = 0 Then Result := PData(Data1)^.Y - PData(Data2)^.Y; end; |
Re: Liste Sortieren nach 2 Parametern
Danke für die Antworten ich habe das jetzt so gelöst
Delphi-Quellcode:
function CompareNamesY(Item1, Item2: PData): Integer;
begin Result:=Round(Item1^.Y+(1/Item1^.X)-Item2^.Y+(1/Item2^.X)); end; |
Re: Liste Sortieren nach 2 Parametern
@franktron: ... und das funktioniert? Ich dachte als Funktionsergebnis wird 1, 0 oder -1 erwartet! In deinem Fall könnten bei entsprechenden Y-Werten ja auch andere Ergebnisse zurückgeliefert werden.
Grundsätzlich sollte die "Berliner-Lösung" von alzaimar effizienter sein. |
Re: Liste Sortieren nach 2 Parametern
Nein ;) Es will nur "kleiner 0, 0 oder größer 0":
Delphi-Quellcode:
Zumindest unter Delphi 2009!
while SCompare(SortList^[I], P) < 0 do
Inc(I); while SCompare(SortList^[J], P) > 0 do Dec(J); MfG xZise |
Re: Liste Sortieren nach 2 Parametern
Zitat:
Gruß Gammatester |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:11 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz