Delphi-PRAXiS
Seite 4 von 4   « Erste     234   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Elegante Lösung gesucht, 3 Boolean-Werte, nur einer darf gesetzt sein (https://www.delphipraxis.net/188339-elegante-loesung-gesucht-3-boolean-werte-nur-einer-darf-gesetzt-sein.html)

Valle 24. Feb 2016 14:03

AW: Elegante Lösung gesucht, 3 Boolean-Werte, nur einer darf gesetzt sein
 
Zitat:

Zitat von Jasocul (Beitrag 1331221)
Wie wäre denn:
Delphi-Quellcode:
b4 := Ord(b1 and True) + Ord(b2 and True) + Ord(b3 and True) = 1;

Hast du das mal ausprobiert? Könnte mir vorstellen, dass es wegoptimiert wird.

himitsu 24. Feb 2016 14:04

AW: Elegante Lösung gesucht, 3 Boolean-Werte, nur einer darf gesetzt sein
 
Delphi-Quellcode:
x and True
und
Delphi-Quellcode:
x or False
arbeiten logisch, also ja ...... faaaaaaaaalls der Compiler das nicht "optimiert" und weg lässt. :zwinker:

Jasocul 24. Feb 2016 14:05

AW: Elegante Lösung gesucht, 3 Boolean-Werte, nur einer darf gesetzt sein
 
Ja, ist getestet und hat bei mir funktioniert.
Habe bewusst mit Werten ungleich 1 für die Variablen getestet.

alex517 24. Feb 2016 17:33

AW: Elegante Lösung gesucht, 3 Boolean-Werte, nur einer darf gesetzt sein
 
Zitat:

Zitat von hoika (Beitrag 1330992)
Wie löst man das eleganter ???
Ich will nicht viele And's und Or's haben.

da würde ich diese Varianten bevorzugen
Delphi-Quellcode:
function CountChecked(AValues: Array of Boolean): Integer;
var
  i: Integer;
begin
  Result := 0;
  for I := Low(AValues) to High(AValues) do
    if AValues[i] then inc(Result);
end;
oder
Delphi-Quellcode:
function CountChecked(AValues: Array of Boolean): Integer;
var
  i: Integer;
begin
  Result := 0;
  for I := Low(AValues) to High(AValues) do
    Inc(Result, Ord(AValues[i] <> false));
end;

Aufruf:
Delphi-Quellcode:
  if CountChecked([True, False, Boolean(3), Boolean(0), Boolean(99), Boolean(-1)]) = 1 then
   ...
So kann man beliebig viele Parameter übergeben und hat die Möglichkeit zu entscheiden
wie viele true sein müssen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:42 Uhr.
Seite 4 von 4   « Erste     234   

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