AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

TObjectList Multisort

Ein Thema von Codehunter · begonnen am 18. Okt 2021 · letzter Beitrag vom 19. Okt 2021
Antwort Antwort
Benutzerbild von Codehunter
Codehunter

Registriert seit: 3. Jun 2003
Ort: Thüringen
2.272 Beiträge
 
Delphi 10.4 Sydney
 
#1

TObjectList Multisort

  Alt 18. Okt 2021, 14:20
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
Ich mache grundsätzlich keine Screenshots. Schießen auf Bildschirme gibt nämlich hässliche Pixelfehler und schadet der Gesundheit vom Kollegen gegenüber. I und E zu vertauschen hätte den selben negativen Effekt, würde aber eher dem Betriebsklima schaden
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.752 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: TObjectList Multisort

  Alt 18. Okt 2021, 14:34
.. 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:
-> https://docwiki.embarcadero.com/Code...tSort_(Delphi)

Bei Namensgleichheit dann auf die Zeit schauen.

Grüße
Klaus
Klaus

Geändert von Klaus01 (19. Okt 2021 um 07:44 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.007 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#3

AW: TObjectList Multisort

  Alt 19. Okt 2021, 07:39
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);
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.752 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: TObjectList Multisort

  Alt 19. Okt 2021, 07:45
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);
fehlt da nicht ein "@"
list.Sort(@CompareItem) oder ist die Hilfe nicht das was sie sein soll?
Klaus

Geändert von Klaus01 (19. Okt 2021 um 08:02 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.007 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#5

AW: TObjectList Multisort

  Alt 19. Okt 2021, 08:20
Kann man weglassen.
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
Benutzerbild von Codehunter
Codehunter

Registriert seit: 3. Jun 2003
Ort: Thüringen
2.272 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: TObjectList Multisort

  Alt 19. Okt 2021, 12:26
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.
Ich mache grundsätzlich keine Screenshots. Schießen auf Bildschirme gibt nämlich hässliche Pixelfehler und schadet der Gesundheit vom Kollegen gegenüber. I und E zu vertauschen hätte den selben negativen Effekt, würde aber eher dem Betriebsklima schaden
  Mit Zitat antworten Zitat
Benutzerbild von uligerhardt
uligerhardt

Registriert seit: 19. Aug 2004
Ort: Hof/Saale
1.734 Beiträge
 
Delphi 2007 Professional
 
#7

AW: TObjectList Multisort

  Alt 19. Okt 2021, 19:56
Kann man weglassen.
Sollte man weglassen (wo es geht). Verschenkt nur Typsicherheit.
Uli Gerhardt
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:19 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