AGB  ·  Datenschutz  ·  Impressum  







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

Custom Sort - CompareItems mit Boolean

Ein Thema von ryLIX · begonnen am 14. Feb 2010 · letzter Beitrag vom 15. Feb 2010
Antwort Antwort
ryLIX

Registriert seit: 16. Nov 2008
Ort: Westoverledingen
264 Beiträge
 
RAD-Studio 2009 Pro
 
#1

Custom Sort - CompareItems mit Boolean

  Alt 14. Feb 2010, 22:57
Hi ihr,
irgendwie steh ich grad voll auf dem Schlauch...
function TMyClass.CompareItems(Item1, Item2: Pointer): Integer; Jetzt hab ich in meiner Klasse auch Felder vom Typ Boolean.
Wie kann ich nun nach Boolean Sortieren?
Sprich erst True dann False / vice versa
Markus
Hamburflys, Scrubble-Fubble-Puff-Shake, Muffin-Purper-Gurk?
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#2

Re: Custom Sort - CompareItems mit Boolean

  Alt 14. Feb 2010, 23:05
Wo ist das Problem? Das ist doch dir überlassen, wie du deine Items sortierst. Ich würde einfach False < True verwenden, da False als 0 und True als 1 deklariert ist, und 0 < 1 ist.

Delphi-Quellcode:
if TMyItem(Item1).MyBool = TMyItem(Item2).MyBool then
  Result := 0
else if TMyItem(Item1).MyBool and not TMyItem(Item2).MyBool then
  Result := 1
else{ if not TMyItem(Item1).MyBool and TMyItem(Item2).MyBool then}
  Result := -1
Ich weiß jetzt nicht, ob 1 und -1 stimmt, vielleicht muss es auch andersrum sein, um meiner oben genannten Sortierlogik zu entsprechen - ich verwechsel immer, wofür positiv und negativ beim Sortieren steht.
  Mit Zitat antworten Zitat
Panthrax

Registriert seit: 18. Feb 2005
286 Beiträge
 
Delphi 2010 Enterprise
 
#3

Re: Custom Sort - CompareItems mit Boolean

  Alt 15. Feb 2010, 00:05
Delphi-Quellcode:
function Compare(const Left, Right: T): Integer;
begin
  Result := Integer(Left.BooleanValue) - Integer(Right.BooleanValue); // False < True
end;
Hinweis: True ist nicht immer gleich True. Es kann unterschiedlich definiert sein (Boolean, ByteBool, WordBool,... in C, oder etwa bei Datenbanken). Einmal sei True = -1, ein andermal sei True = 1, dann ergeben sich für Cardinal(True), Integer(True) andere Werte, und dehen ggf. die Relation False < True um. Vielleicht hilft es Integer(Boolean(...)) zu schreiben (?).
"Es gibt keine schlimmere Lüge als die Wahrheit, die von denen, die sie hören, missverstanden wird."
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#4

Re: Custom Sort - CompareItems mit Boolean

  Alt 15. Feb 2010, 00:48
Da geh ich dann doch lieber auf Nummer Sicher und nutze meine Methode
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#5

Re: Custom Sort - CompareItems mit Boolean

  Alt 15. Feb 2010, 06:22
Zitat von NamenLozer:
Da geh ich dann doch lieber auf Nummer Sicher und nutze meine Methode
Is aber unübersichtlich und langsam(er), dann lieber so:
Delphi-Quellcode:
Function CompareBoolean (a,b : Boolean) : Integer;
Begin
  Result := ord(a) - ord(b);
End;
oder so:
Delphi-Quellcode:
Function CompareBoolean (a,b : Boolean) : Integer;
Const
  BoolOrder : Array [False..True] Of Integer = (0,1); // Oder 1,0 wenn man andersherum sortieren will
Begin
  Result := BoolOrder[a] - BoolOrder[b];
End;
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
ryLIX

Registriert seit: 16. Nov 2008
Ort: Westoverledingen
264 Beiträge
 
RAD-Studio 2009 Pro
 
#6

Re: Custom Sort - CompareItems mit Boolean

  Alt 15. Feb 2010, 09:22
Danke für eure Hilfe nun sollte es klappen
Markus
Hamburflys, Scrubble-Fubble-Puff-Shake, Muffin-Purper-Gurk?
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

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

Re: Custom Sort - CompareItems mit Boolean

  Alt 15. Feb 2010, 09:27
Statt
Zitat:
BoolOrder : Array [False..True] Of Integer = (0,1);
würde ich aber gleichBoolOrder : Array [Boolean] Of Integer = (0,1); schreiben.
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
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 10:40 Uhr.
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