![]() |
TObjectList Multisort
Hallo!
Ich habe eine TObjectList und darin Klassen mit z.B. einer "Name" = string und einer "Zeit" = TDateTime Property. Die Einträge sind zunächst wild durcheinander. Ich müsste die Liste nun so sortieren, dass nach "Name" aufsteigend und nach "Zeit" absteigend sortiert wird. Nach der Sortierung sollen alle Einträge mit gleichem Namen untereinander stehen und dabei von Zeile zu Zeile der Zeitwert kleiner werden. Also im Prinzip in Delphi eine Sortierung nachbauen die äquivalent zu dieser SQL-Abfrage sortiert: SELECT * FROM myTable ORDER BY name ASC, zeit DESC Grüße Cody |
AW: TObjectList Multisort
.. wenn die Klassen eine einheitlich Basisklasse mit den Properties "Name" und "Zeit" haben
sollte das doch mit der Funktion sort und einer TComparer Funktion gehen: -> ![]() Bei Namensgleichheit dann auf die Zeit schauen. Grüße Klaus |
AW: TObjectList Multisort
Delphi-Quellcode:
function CompareItem(Item1, Item2: Pointer): Integer;
begin Result := AnsiCompareText(TMyObj(Item1).Name, TMyObj(Item2).Name); if Result = 0 then Result := CompareDateTime(TMyObj(Item2).Zeit, TMyObj(Item1).Zeit); end; ... list.Sort(CompareItem); |
AW: TObjectList Multisort
Zitat:
Delphi-Quellcode:
oder ist die Hilfe nicht das was sie sein soll?
list.Sort(@CompareItem)
|
AW: TObjectList Multisort
Kann man weglassen.
|
AW: TObjectList Multisort
Ich danke euch! Die Lösung ist tatsächlich so einfach. Mich hatte nur die Komplexität der zu sortierenden Liste erschlagen (dreidimensional! Hatte ich nur hier nicht gesagt, weil das vom Problem abgelenkt hätte). Gedanklich habe ich immer versucht, die Liste spaltenweise zu sortieren. Mit eurer Methode muss ich nur die Spaltenwerte nacheinander vergleichen und kann so zeilenweise sortieren, was auch gleich noch viel effizienter ist.
|
AW: TObjectList Multisort
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:44 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-2025 by Thomas Breitkreuz