![]() |
Variable mit mehreren Werten vergleichen ohne "OR"
Guten morgen.
Delphi-Quellcode:
kann man das einfacher machen das ich einfach auf OR verzichente kann ? MFG
Procedure Gegenstand(Bezeichnung:String);
begin ... IF (Bezeichnung= 'rohr') or (Bezeichnung= 'schraube') or (Bezeichnung= 'schraubendreher') Then .... ... end; |
Re: Variable mit mehreren Werten vergleichen ohne "OR&a
ich sehe da keine andere "schöne" Lösung.
Dies hier geht nicht, weil String keine ordinaler Typ ist:
Delphi-Quellcode:
was Du noch machen kannst: mehrere if verschachteln
if x in ['aaa', 'bbb', 'ccc'] then
begin ... end;
Delphi-Quellcode:
was besseres fällt mir nicht dazu ein.
if x = 'aaa' then
begin if x = 'bbb' then begin if x = 'ccc' then begin ... end; end; end; |
Re: Variable mit mehreren Werten vergleichen ohne "OR&a
Dann ist ja die erste Lösung (meine) schöner ;)
Denn wenn es um 10 vergleichweten kommen soll, dann werden das 10x or´s :( |
Re: Variable mit mehreren Werten vergleichen ohne "OR&a
Das verschachteln wäre nicht der Nachbei mit "or" sonder das was der compiler intern bei "and" macht.
|
Re: Variable mit mehreren Werten vergleichen ohne "OR&a
Hallo,
bei 10 Vergleichswerten ist folgende Lösung wahrscheinlich übersichtlicher und flexibler:
Delphi-Quellcode:
Gruß, Volker
Procedure Gegenstand(Bezeichnung:String);
var sl : TStringList; begin sl := TStringList.Create; sl.CaseSensitive := true; sl.DelimitedText := 'rohr, schraube, schraubendreher'; IF sl.IndexOf(Bezeichnung) > -1 then ShowMessage(Bezeichnung + ' ist enthalten.'); sl.Free; end; |
Re: Variable mit mehreren Werten vergleichen ohne "OR&a
also bevor du mit der langsammen TStringList arbeitest dann besser so:
Delphi-Quellcode:
Ist auch nicht sonderlich effizient, da Pos() benutzt wird, drüfte aber schneller sein als eine Schleife, TStringList oä.
if Pos('-' + Bezeichnung + '-', '-rohr-schraube-schraubendreher-') > 0 then
Falls Pos() intern nach dem Boyer-Moore Algo. arbeitet ist die Stringsuche sogar sehr effizient. Die schnellste Lösung dürfte ein Tree sein. In einem solchen Baum sind deine Suchwörter auf spezielle Weise gespeichert so das man darin sehr sehr schnell überprüfen kann ob ein gesuchtes Wort existiert. Je nach Baum-Typus und Codierung würde dieser sogar weniger Speicherplatz verwenden als die Strings wie in deinem Beispiel zu speichern. ZB. Schraube und Schraubedreher würde nur einmal Schraube und einmal "dreher" im Tree speichern. Eine sehr effiziente Tree Struktur im Source kannst du hier saugen: ![]() Das ist ein DAWG und so könntest du ihn benutzen:
Delphi-Quellcode:
Gruß Hagen
var
List: TDawg = nil; procedure InitList; begin List := TDawg.Create; List.Insert('Schraube'#0'Schraubendreher'#0'Rohr'); List.Pack; end; procedure Search; begin if List.Exists(Suchstring) then end; |
Re: Variable mit mehreren Werten vergleichen ohne "OR&a
Wie wäre es wenn Du die einzelnen Worte an ein Array übergibst, und dann per Schleife prüfst ob es existiert.
|
Re: Variable mit mehreren Werten vergleichen ohne "OR&a
Zitat:
|
Re: Variable mit mehreren Werten vergleichen ohne "OR&q
Hi,
das hier sieht warscheinlich ein bischen blöd aus, funktioniert aber ;-)
Delphi-Quellcode:
Das folgende ist etwas eleganter ;-)
Procedure Gegenstand(Bezeichnung:String);
begin ... // statt '#' kann natürlich auch alles andere genommen werden ;-) if pos('#'+Bezeichnung+'#', '#rohr#schraube#schraubendreher#')>0 then .... ... // oder auch: 1 6 15 case pos('#'+Bezeichnung+'#', '#rohr#schraube#schraubendreher#') of 1: machwas; // rohr 6: machwas; // schraube 15: machwas; // schraubendreher else machwas; // nix end; ... end;
Delphi-Quellcode:
mfg
function getArrayIndex(s: string; a: array of string): integer;
var i: Integer; begin Result := -1; for i := low(a) to high(a) do begin if s = a[i] then begin Result := i; exit; end; end; end; procedure TestIt(Bezeichnung:String);; begin ... if getArrayIndex(Bezeichnung, ['rohr', 'schraube', 'schraubendreher']) > -1 then ... case getArrayIndex(Bezeichnung, ['rohr', 'schraube', 'schraubendreher']) of 0: machwas; // 1. String (rohr) 1: machwas; // 2. String (schraube) 2: machwas; // 3. String (schraubendreher) -1: machwas; // nicht gefunden end; ... end; MaBuSE |
Re: Variable mit mehreren Werten vergleichen ohne "OR&a
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:37 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 by Thomas Breitkreuz