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

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

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);
Ein Therapeut entspricht 1024 Gigapeut.

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

Registriert seit: 14. Mai 2003
Ort: Gerstrhofen
1.112 Beiträge
 
Delphi 12 Athens
 
#2

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
4.045 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#3

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

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

AW: TArray.Sort sortieren von mehreren Feldern

  Alt 6. Feb 2017, 14:52
Standardmäßig sind die Überlaufprüfungen deaktiviert, aber wenn das mal wer in den Projektoptionen aktiviert, zwecks Fehlersuche, dann knallt es halt an vielen Stellen.

Hier sollte man diese Prüfung eben explizit um diese Codestelle deaktivieren, da der Überlauf ja quasi gewollt ist.
Oder man verwendet Code ohne Überlauf.

Die Auswertungen für diese Vergleichsergebnisse vergleichen extra ausschließlich gegen 0 und nicht geziehlt auf -1 und +1.
Drum gehen da auch Werte außerhalb dieses Bereichs.

Delphi-Quellcode:
function CompareValue(const A, B: Irgendwas): TValueRelationship{Integer};
begin
  if A = B then
    Result := EqualsValue
  else if A < B then
    Result := LessThanValue
  else
    Result := GreaterThanValue;
end;
Delphi-Quellcode:
function CompareValue(const A, B: Irgendwas): Integer;
begin
  Result := B - A;
end;
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu ( 6. Feb 2017 um 14:58 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort

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 22:20 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