Einzelnen Beitrag anzeigen

Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#12

Re: Variable mit mehreren Werten vergleichen ohne "OR&a

  Alt 28. Nov 2006, 09:13
@Mabuse:

Delphi-Quellcode:
// statt '#' kann natürlich auch alles andere genommen werden ;-)
  if pos('#'+Bezeichnung+'#', '#rohr#schraube#schraubendreher#')>0 then ....
ja könnte man, zb.

  if pos('-' + Bezeichnung + '-', '-rohr-schraube-schraubendreher-')>0 then .... ups das hatte ich doch schon 4 Threads vorher gepostet

[edit]
Mist, hat Mabuse auch schon erkannt.
Liest überhaupt einer die blöde rote Box bevor man postet, ich nicht
[/edit]


Die beste Lösung ist die 2. von Mabuse, aus Sicht des besten Codes, allerdings mit kleinen Änderungen:

Delphi-Quellcode:
function IndexOf(const Value: String; const List: array of String): Integer;
var
  I: Integer;
begin
  Result := -1;
  for I := Low(List) to High(List) do
    if Value = List[I] then
    begin
      Result := I;
      Break;
    end;
end;

procedure TestIt(Bezeichnung: String);
begin
  case IndexOf(Bezeichnung, ['rohr', 'schraube', 'schraubendreher']) of
     0: machwas; // 1. String (rohr)
     1: machwas; // 2. String (schraube)
     2: machwas; // 3. String (schraubendreher)
    -1: machnichts; // nicht gefunden
  end;
end;
1.) const Parameter machen die Sache effizienter vom erzeugten Code. Besonders beim const List: array of String ist das enorm wichtig. Denn nun wird unser Array[] im Source das wir übergeben -> ['rohr', 'schraube', 'schraubendreher'] durch den Compiler hardcoded als fertiges Array[] im Code abgelegt. Also auch wenn man vermuten würde das zur Laufzeit unser dynamisches Array[] erst erzeugt wird und die 3 Strings darin eingefügt werden, so passiert eben dies nicht. Aber nur wenn wir konstante Arrays[] benutzen. Denn wenn nicht so wird die Funktion IndexOf() uU. eine komplette Kopie des übergebenen Atrrays anlegen.

2.) du musst nicht zweimal in der Liste Suchen, ein case of reicht aus, also ohne if then vorher.

Gruß Hagen
  Mit Zitat antworten Zitat