Domanda

Voglio fare qualcosa del genere:

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

Questo non può essere usato con le stringhe e non voglio fare qualcosa del genere:

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

Inoltre penso che creare una StringList per fare proprio questo sia troppo complesso.

Esiste un altro modo per raggiungere questo obiettivo?

Grazie.

È stato utile?

Soluzione

Potresti usare AnsiIndexText (const AnsiString AText, const array di string AValues): integer o MatchStr (const AText: string; const AValues: array di string): Boolean;

Qualcosa di simile

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

o

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

AnsiIndexText restituisce l'offset 0   indice della prima stringa in cui trova   Valori corrispondenti a AText    è case-sensitive . Se la stringa   specificato da AText non ha un   (possibilmente senza distinzione tra maiuscole e minuscole)   Valori, AnsiIndexText restituisce & # 8211; 1.   I confronti si basano sulla corrente   impostazioni locali del sistema.

     

MatchStr determina se uno dei   le stringhe nell'array AValues ??corrispondono a   stringa specificata da AText utilizzando un caso   confronto sensibile . Restituisce vero   se almeno una delle stringhe nel file   array match, o false se nessuno dei   le stringhe corrispondono.

Nota AnsiIndexText ha la distinzione tra maiuscole e minuscole e MatchStr fa distinzione tra maiuscole e minuscole, quindi immagino che dipenda dal tuo utilizzo

EDIT: 2011-09-3 : ho appena trovato questa risposta e ho pensato di aggiungere una nota che, in Delphi 2010, esiste anche una funzione MatchText che è la uguale a MatchStr ma senza distinzione tra maiuscole e minuscole. - Larry

Altri suggerimenti

Il codice di Burkhard funziona, ma scorre inutilmente sull'elenco anche se viene trovata una corrispondenza.

Approccio migliore:

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;

Ecco una funzione che fa il lavoro:

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 effetti, si confronta MyString con ogni stringa in Stringhe. Non appena ne trovi uno corrispondente, puoi uscire dal ciclo for.

Puoi provare questo:

Result := Pos(MyString, string1+string2+string3+string4) > 0
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top