delphi - La mejor forma de encontrar si una cadena está en una lista(sin genéricos)
delphi-2007 (4)
Aquí hay una función que hace el trabajo:
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;
De hecho, comparas MyString con cada cadena en Strings. Tan pronto como encuentre una coincidencia puede salir del ciclo for.
Quiero hacer algo como esto:
Result = ''MyString'' in [string1, string2, string3, string4];
Esto no se puede usar con cadenas y no quiero hacer algo como esto:
Result = ((''MyString'' = string1) or (''MyString'' = string2));
También creo que crear una StringList para hacer esto es demasiado complejo.
¿Hay alguna otra forma de lograr esto?
Gracias.
El código de Burkhard funciona, pero se repite sin necesidad sobre la lista, incluso si se encuentra una coincidencia.
Mejor enfoque:
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;
Podría usar AnsiIndexText (const AnsiString AText, const array of string AValues): integer o MatchStr (const AText: string; const AValues: array of string): Boolean;
Algo como
Result := (AnsiIndexText(''Hi'',[''Hello'',''Hi'',''Foo'',''Bar'']) > -1);
o
Result := MatchStr(''Hi'', [''foo'', ''Bar'']);
AnsiIndexText devuelve el índice 0-offset de la primera cadena que encuentra en AValos que coinciden con AText sin distinción entre mayúsculas y minúsculas . Si la cadena especificada por AText no tiene una coincidencia (posiblemente insensible a mayúsculas / minúsculas) en AValues, AnsiIndexText devuelve -1. Las comparaciones se basan en la configuración regional actual del sistema.
MatchStr determina si alguna de las cadenas de la matriz AValues coincide con la cadena especificada por AText usando una comparación sensible a mayúsculas y minúsculas . Devuelve verdadero si al menos una de las cadenas en la matriz coincide, o es falso si ninguna de las cadenas coincide.
Nota: AnsiIndexText distingue mayúsculas de minúsculas y MatchStr distingue entre mayúsculas y minúsculas, así que supongo que depende de tu uso.
EDITAR: 2011-09-3 : Acabo de encontrar esta respuesta y pensé en agregar una nota que, en Delphi 2010, también hay una función de MatchText
que es igual a MatchStr
pero case insensible. - Larry
Puedes intentar esto:
Result := Pos(MyString, string1+string2+string3+string4) > 0