Delphi-PRAXiS
Seite 1 von 2  1 2   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   TArray.Sort sortieren von mehreren Feldern (https://www.delphipraxis.net/191639-tarray-sort-sortieren-von-mehreren-feldern.html)

Kostas 5. Feb 2017 19:39

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:
  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)
  );
Gruß Kostas

DeddyH 5. Feb 2017 19:53

AW: TArray.Sort sortieren von mehreren Feldern
 
Natürlich, ersetz einfach in der "innersten" Zeile id durch id2 (für beide Records).

Kostas 5. Feb 2017 20:17

AW: TArray.Sort sortieren von mehreren Feldern
 
Etwa so?

Delphi-Quellcode:
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)
   );
In meinem Beispiel funktioniert es aber ich habe testweise nur wenig Daten.
Gruß Kostas

DeddyH 5. Feb 2017 20:42

AW: TArray.Sort sortieren von mehreren Feldern
 
Das sollte auch mit sehr vielen Daten funktionieren.

Kostas 5. Feb 2017 21:15

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

DeddyH 5. Feb 2017 21:20

AW: TArray.Sort sortieren von mehreren Feldern
 
Die Richtung wird dadurch bestimmt, ob du "rechts" von "links" subtrahierst oder andersherum.

Kostas 5. Feb 2017 21:55

AW: TArray.Sort sortieren von mehreren Feldern
 
Perfekt, herzlichen Dank und eine schöne Zeit.

himitsu 6. Feb 2017 11:08

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.
Delphi-Referenz durchsuchenCompareValue, Delphi-Referenz durchsuchenCompareStr usw.

Zitat:

Zitat von Types.pas
Delphi-Quellcode:
type
  TValueRelationship = -1..1;

const
  LessThanValue = Low(TValueRelationship);
  EqualsValue = 0;
  GreaterThanValue = High(TValueRelationship);


Kostas 6. Feb 2017 11:37

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

Stevie 6. Feb 2017 14:03

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 19:59 Uhr.
Seite 1 von 2  1 2   

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