![]() |
Delphi-Version: 5
TArray.Sort sortieren von mehreren Feldern
Hallo Zusammen,
zum sortieren von Arrays verwende ich gerne die Methode TArray.Sort. Jetzt habe ich eine Anforderung, innerhalb des Feldes "id" zusätzlich nach einem weiteren Feld "id2" zu sortieren. Mein Record beinhaltet also id,id2:integer. Es soll zuerst nach id und bei gleicher id nach id2 sortieren. Ist das mit TArray.Sort möglich?
Delphi-Quellcode:
Gruß Kostas
TArray.Sort<TNeuTblRecord>( NeuTblArray , TDelegatedComparer<TNeuTblRecord>.Construct(
function(const Left, Right: TNeuTblRecord): Integer begin Result := (Left.id - Right.id); if Result = 0 then Result := Left.id - Right.id; end) ); |
AW: TArray.Sort sortieren von mehreren Feldern
Natürlich, ersetz einfach in der "innersten" Zeile id durch id2 (für beide Records).
|
AW: TArray.Sort sortieren von mehreren Feldern
Etwa so?
Delphi-Quellcode:
In meinem Beispiel funktioniert es aber ich habe testweise nur wenig Daten.
TArray.Sort<TNeuTblRecord>( NeuTblArray , TDelegatedComparer<TNeuTblRecord>.Construct(
function(const Left, Right: TNeuTblRecord): Integer begin Result := (Left.id - Right.id); if Result = 0 then Result := Left.id2 - Right.id2; end) ); Gruß Kostas |
AW: TArray.Sort sortieren von mehreren Feldern
Das sollte auch mit sehr vielen Daten funktionieren.
|
AW: TArray.Sort sortieren von mehreren Feldern
Ok, herzlichen Dank für die Hilfe.
Eigentlich habe ich nicht verstanden warum es funktioniert ab erst einmal Egal. Ich brauche es zwar nicht, aber gibt es eine Möglichkeit die Sortierrichtung für id und id2 jeweils zu setzen? Gruß Kostas |
AW: TArray.Sort sortieren von mehreren Feldern
Die Richtung wird dadurch bestimmt, ob du "rechts" von "links" subtrahierst oder andersherum.
|
AW: TArray.Sort sortieren von mehreren Feldern
Perfekt, herzlichen Dank und eine schöne Zeit.
|
AW: TArray.Sort sortieren von mehreren Feldern
Die Summierung macht nicht anderes, als die 3 Werte für die Vergleichrichtung zu errechnen. (-1, 0 und +1, bzw. <0 =0 und >0)
Man kann stattdessen auch die entsprechenden Vergleichsfunktionen verwenden. ![]() ![]() Zitat:
|
AW: TArray.Sort sortieren von mehreren Feldern
ah, jetzt ist das Prinzip klar.
Besten Dank für die Hilfe und einen schönen Tag. Gruß Kostas |
AW: TArray.Sort sortieren von mehreren Feldern
Bitte keine Werte durch Subtraktion vergleichen.
Erstens sorgt es dafür, dass die Ergebnismenge nicht nur im Bereich -1..1 liegt und zweitens hagelts bei bestimmten Zahlenkombinationen einen Overflow. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:59 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