Frage

Ich möchte so etwas wie dies tun:

Result = 'MyString' in [string1, string2, string3, string4];

Dies kann nicht mit strings verwendet werden und ich möchte nicht so etwas wie dies tun:

Result = (('MyString' = string1) or ('MyString' = string2));

Ich denke auch, dass die Schaffung einer StringList zu tun, das ist zu Komplex.

Gibt es eine andere Möglichkeit, dies zu erreichen?

Vielen Dank.

War es hilfreich?

Lösung

Sie könnte verwenden AnsiIndexText(const AnsiString AText, const array von string-AValues):integer oder MatchStr(const AText:string;const AValues:array of string):Boolean;

So etwas wie

Result := (AnsiIndexText('Hi',['Hello','Hi','Foo','Bar']) > -1);

oder

Result := MatchStr('Hi', ['foo', 'Bar']); 

AnsiIndexText gibt die 0-offset index des ersten Strings findet es in AValues, der AText entspricht Fall-unempfindlich.Wenn der string angegeben AText nicht über ein (möglicherweise groß-und Kleinschreibung) entsprechen, in AValues, AnsiIndexText gibt -1 zurück.Vergleiche basieren auf den aktuellen system locale.

MatchStr bestimmt, ob ein strings im array AValues übereinstimmen string angegeben AText mit einem Fall sensible Vergleich.Es gibt true zurück wenn mindestens eine der Zeichenfolgen in der array übereinstimmen, oder false, wenn keine der strings übereinstimmen.

Hinweis AnsiIndexText hat Fall-unempfindlich und MatchStr ist Fall empfindlich, so dass ich denke, es hängt auf Ihre Nutzung

EDIT:2011-09-3:Nur fand diese Antwort und dachte, ich würde hinzufügen, dass das in Delphi 2010 gibt es auch eine MatchText Funktion, die die gleiche wie MatchStr aber Fall insenstive.-- Larry

Andere Tipps

Der Code von Burkhard funktioniert, aber Iterierten unnötig über die Liste selbst wenn eine Übereinstimmung gefunden wird.

Besserer Ansatz:

function StringInArray(const Value: string; Strings: array of string): Boolean;
var I: Integer;
begin
  Result := True;
  for I := Low(Strings) to High(Strings) do
    if Strings[i] = Value then Exit;
  Result := False;
end;

Hier ist eine Funktion, die die Arbeit erledigt:

function StringInArray(Value: string; Strings: array of string): Boolean;
var I: Integer;
begin
  Result := False;
  for I := Low(Strings) to High(Strings) do
  Result := Result or (Value = Strings[I]);
end;

In der Tat, vergleichen Sie MyString mit jeder Saite in Strings. Sobald Sie eine passende finden können Sie die for-Schleife beenden.

Sie können versuchen, diese:

Result := Pos(MyString, string1+string2+string3+string4) > 0
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top