Подтвердить что ты не робот

Лучший способ найти строку в списке (без дженериков)

Я хочу сделать что-то вроде этого:

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

Это нельзя использовать со строками, и я не хочу делать что-то вроде этого:

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

Также я думаю, что создание StringList для этого просто слишком сложно.

Есть ли другой способ достичь этого?

Спасибо.

4b9b3361

Ответ 1

Вы можете использовать AnsiIndexText (const AnsiString AText, const array строки AValues): integer или MatchStr (const AText: string; const AValues: массив строки): Boolean;

Что-то вроде

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

или

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

AnsiIndexText возвращает 0-смещение индекс первой строки, которую он находит в AValues, который соответствует AText регистронезависимо. Если строка указанный AText, не имеет (возможно, без учета регистра) совпадают в AValues, AnsiIndexText возвращает -1. Сравнение основано на текущих system locale.

MatchStr определяет, будет ли какой-либо из строки в массиве AValues ​​соответствуют строка, указанная AText с использованием аргумента чувствительное сравнение. Он возвращает true если хотя бы одна из строк в массив, или false, если ни одна из соответствие строк.

Примечание. AnsiIndexText имеет регистр без учета регистра, а MatchStr чувствителен к регистру, поэтому я предполагаю, что это зависит от вашего использования.

EDIT: 2011-09-3. Просто нашел этот ответ и подумал, что добавлю примечание, что в Delphi 2010 есть также функция MatchText, которая совпадает с MatchStr но случай insenstive. - Ларри

Ответ 2

Код Буркхарда работает, но безрезультатно повторяется над списком, даже если найдено совпадение.

Лучший подход:

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;

Ответ 3

Вот функция, которая выполняет задание:

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;

Фактически, вы сравниваете MyString с каждой строкой в ​​Строках. Как только вы найдете одно совпадение, вы можете выйти из цикла for.

Ответ 4

Вы можете попробовать следующее:

Result := Pos(MyString, string1+string2+string3+string4) > 0