AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

TArray.Sort sortieren von mehreren Feldern

Ein Thema von Kostas · begonnen am 5. Feb 2017 · letzter Beitrag vom 6. Feb 2017
Antwort Antwort
Seite 1 von 2  1 2   
Kostas

Registriert seit: 14. Mai 2003
Ort: Gerstrhofen
946 Beiträge
 
Delphi 10 Seattle Enterprise
 
#1

TArray.Sort sortieren von mehreren Feldern

  Alt 5. Feb 2017, 18:39
Delphi-Version: 5
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
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.402 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: TArray.Sort sortieren von mehreren Feldern

  Alt 5. Feb 2017, 18:53
Natürlich, ersetz einfach in der "innersten" Zeile id durch id2 (für beide Records).
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Kostas

Registriert seit: 14. Mai 2003
Ort: Gerstrhofen
946 Beiträge
 
Delphi 10 Seattle Enterprise
 
#3

AW: TArray.Sort sortieren von mehreren Feldern

  Alt 5. Feb 2017, 19:17
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
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.402 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: TArray.Sort sortieren von mehreren Feldern

  Alt 5. Feb 2017, 19:42
Das sollte auch mit sehr vielen Daten funktionieren.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Kostas

Registriert seit: 14. Mai 2003
Ort: Gerstrhofen
946 Beiträge
 
Delphi 10 Seattle Enterprise
 
#5

AW: TArray.Sort sortieren von mehreren Feldern

  Alt 5. Feb 2017, 20:15
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
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.402 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: TArray.Sort sortieren von mehreren Feldern

  Alt 5. Feb 2017, 20:20
Die Richtung wird dadurch bestimmt, ob du "rechts" von "links" subtrahierst oder andersherum.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Kostas

Registriert seit: 14. Mai 2003
Ort: Gerstrhofen
946 Beiträge
 
Delphi 10 Seattle Enterprise
 
#7

AW: TArray.Sort sortieren von mehreren Feldern

  Alt 5. Feb 2017, 20:55
Perfekt, herzlichen Dank und eine schöne Zeit.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
39.698 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: TArray.Sort sortieren von mehreren Feldern

  Alt 6. Feb 2017, 10:08
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 von Types.pas:
Delphi-Quellcode:
type
  TValueRelationship = -1..1;

const
  LessThanValue = Low(TValueRelationship);
  EqualsValue = 0;
  GreaterThanValue = High(TValueRelationship);
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014

Geändert von himitsu ( 6. Feb 2017 um 10:24 Uhr)
  Mit Zitat antworten Zitat
Kostas

Registriert seit: 14. Mai 2003
Ort: Gerstrhofen
946 Beiträge
 
Delphi 10 Seattle Enterprise
 
#9

AW: TArray.Sort sortieren von mehreren Feldern

  Alt 6. Feb 2017, 10:37
ah, jetzt ist das Prinzip klar.

Besten Dank für die Hilfe und einen schönen Tag.

Gruß Kostas
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

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

AW: TArray.Sort sortieren von mehreren Feldern

  Alt 6. Feb 2017, 13:03
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.
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

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 15:16 Uhr.
Powered by vBulletin® Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf