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
Antwort Antwort
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.348 Beiträge
 
Delphi 12 Athens
 
#1

AW: Sortieren eines Array of record

  Alt 9. Sep 2024, 18:18
hier mal mein Delphi-CODE.
Sieht genauso aus, wie das schonmal gezeigte.
https://www.delphipraxis.net/1540712-post7.html

Und was geht daran jetzt nicht?



Delphi-Quellcode:
uses
  System.Generics.Defaults, System.Generics.Collections;

type
  TCode = record
    Wort: string;
    Bezeichnung: string;
    class function Compare(const Left, Right: TCode): Integer; static;
  end;

// arr := Copy(GCodeB); // arr := GCodeB;
// Sort(arr);
var
  arr: TArray<TCode>;
begin
  TArray.Copy<TCode>(GCodeB, arr, Length(GCodeB));
  TArray.Sort<TCode>(arr, TDelegatedComparer<TCode>.Create(TCode.Compare)); // oder eben TArray.Sort<TCode>(arr, TDelegatedComparer<TCode>.Create(procedure ...
  ...
end;
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu ( 9. Sep 2024 um 18:48 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

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

AW: Sortieren eines Array of record

  Alt 11. Sep 2024, 09:34
Irgendwie ist mir die Verwendung von TArray in dem Code noch suspekt.
Delphi-Quellcode:
      SetLength(TArray, lLength);


...


          TArray[Zaehler].Wort := rec.Wort;
          TArray[Zaehler].Bezeichnung := rec.Bezeichnung;
          Pal.Wegbedingung[Zaehler].Wort := TArray[Zaehler].Wort;
          Pal.Wegbedingung[Zaehler].Bezeichnung := TArray[Zaehler].Bezeichnung;
Wir können es in dem gezeigten Code nicht sehen, aber es sieht so aus als ob es eine Variable namens TArray gibt. Das wäre allerdings ungeschickt, da es die Klasse TArray aus System.Generics.Collections verbergen könnte, die ja für die Sortierung benutzt wird.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
ebi

Registriert seit: 8. Sep 2024
11 Beiträge
 
Delphi 12 Athens
 
#3

AW: Sortieren eines Array of record

  Alt 12. Sep 2024, 17:08
Hallo Uwe

habe #17 ausprobiert und bei mir kam ein Breichsprüfungs- Fehler!

HG
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

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

AW: Sortieren eines Array of record

  Alt 12. Sep 2024, 17:43
Hallo Uwe

habe #17 ausprobiert und bei mir kam ein Breichsprüfungs- Fehler!
Da solltest du dich besser an Frank wenden. Der hat das geschrieben.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.348 Beiträge
 
Delphi 12 Athens
 
#5

AW: Sortieren eines Array of record

  Alt 12. Sep 2024, 18:06
Hallo Uwe

habe #17 ausprobiert und bei mir kam ein Breichsprüfungs- Fehler!
Da solltest du dich besser an Frank wenden. Der hat das geschrieben.
Wende dich an Embarcadero. Das Code-Completion hat es geschrieben.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
ebi

Registriert seit: 8. Sep 2024
11 Beiträge
 
Delphi 12 Athens
 
#6

AW: Sortieren eines Array of record

  Alt 13. Sep 2024, 14:37
Hallo Zusammen,

dieser Delphi-CODE funktioniert bei mir sehr gut.

Delphi-Quellcode:
FUNCTION TCodeSorted(Value: array of TCode): TArray<TCode>;
begin
  SetLength(Result, Length(Value));
  for var I := 0 to Length(Result) - 1 do
    Result[I] := Value[Low(Value) + 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;
Delphi-Quellcode:
    // GCodeB sortieren und in TSteuerung
    arr := TCodeSorted(GCodeB);
    l_length := Length(arr);
    SetLength(Pal.Wegbedingung, l_length);
    for var I := 0 to l_length - 1 do
      begin
        Pal.Wegbedingung[I].Wort := arr[I].Wort;
        Pal.Wegbedingung[I].Bezeichnung := arr[I].Bezeichnung;
      end;
HG
  Mit Zitat antworten Zitat
Antwort Antwort


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 11:24 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