我想做这样的事情:
Result = 'MyString' in [string1, string2, string3, string4];
这不能用于字符串,我不想做这样的事情:
Result = (('MyString' = string1) or ('MyString' = string2));
另外我认为创建一个StringList来做这件事太复杂了.
有没有其他方法来实现这一目标?
谢谢.
可以使用AnsiIndexText(常量AnsiString类型AText,串A-值的常量阵列):整数或和matchstr(常量AText:字符串; const的A-值:字符串的数组):布尔值;
就像是
Result := (AnsiIndexText('Hi',['Hello','Hi','Foo','Bar']) > -1);
要么
Result := MatchStr('Hi', ['foo', 'Bar']);
AnsiIndexText返回它发现在匹配AText A-值的第一串的0偏移索引 不区分大小写.如果AText指定的字符串没有在A-值(可能不区分大小写)匹配,AnsiIndexText返回-1.比较基于当前系统区域设置.
MatchStr使用区分大小写的比较确定数组AValues中的任何字符串是否与AText指定的字符串匹配.如果数组中的至少一个字符串匹配,则返回true;如果没有字符串匹配,则返回false.
注意AnsiIndexText
不区分大小写并且MatchStr
区分大小写,所以我想这取决于您的使用情况
编辑:2011-09-3:刚刚找到这个答案,并认为我会添加一个注释,在Delphi 2010中还有一个MatchText
功能,MatchStr
但不区分大小写. - 拉里
Burkhard的代码可以工作,但即使找到匹配项,也会在列表上不必要地迭代.
更好的方法:
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;