Beste Weg, um herauszufinden, ob ein string in eine Liste (ohne generics)
-
05-07-2019 - |
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.
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