AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Sortieren eines Array of record

Ein Thema von ebi · begonnen am 8. Sep 2024 · letzter Beitrag vom 13. Sep 2024
 
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.654 Beiträge
 
Delphi 12 Athens
 
#2

AW: Sortieren eines Array of record

  Alt 8. Sep 2024, 09:19
Ich gehe mal davon aus, dass die Sortierung zur Laufzeit erfolgen soll. Um die Konstantendeklaration zu sortieren, hilft am Ende nur manuelles Verschieben der Zeilen.

Für die Sortierung zur Laufzeit benötigen wir ein dynamisches Array, was am einfachsten generisch als TArray<TCode> deklariert werden kann. In dieses kopieren wir die Werte aus GCodeB und sortieren es dann mit Hilfe der in System.Generics.Default und System.Generics.Collection deklarierten Klassen. Damit die Records auch numerisch sortiert werden, verwenden wir die in System.Sysutils deklarierte string-Helper Funktion Compare mit der Option coDigitAsNumbers .
Delphi-Quellcode:
function GCodeBSorted: TArray<TCode>;
begin
  SetLength(Result, Length(GCodeB));
  for var I := 0 to Length(Result) - 1 do
    Result[I] := GCodeB[Low(GCodeB) + I];
  TArray.Sort<TCode>(Result, TDelegatedComparer<TCode>.Create(
    function(const Left, Right: TCode): Integer
    begin
      Result := string.Compare(Left.Wort, Right.Wort, [coDigitAsNumbers]);
    end));
end;
Dabei ist zu beachten, dass das dynamische Array immer mit dem Index 0 beginnt, während das GCodeB ja als array [1 .. 35] of TCode deklariert ist. Das ist beim Zugriff auf das sortierte Array zu beachten. Hier ein simples Beispiel für den Funktionsaufruf und die Ausgabe des sortierten Arrays:
Delphi-Quellcode:
    var arr := GCodeBSorted;
    for var rec in arr do
      Writeln(rec.Wort, ': ', rec.Bezeichnung);
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
 


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 02:13 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