当前位置:  开发笔记 > 编程语言 > 正文

查找字符串是否在列表中的最佳方法(无泛型)

如何解决《查找字符串是否在列表中的最佳方法(无泛型)》经验,为你挑选了2个好方法。

我想做这样的事情:

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

这不能用于字符串,我不想做这样的事情:

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

另外我认为创建一个StringList来做这件事太复杂了.

有没有其他方法来实现这一目标?

谢谢.



1> Re0sless..:

可以使用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但不区分大小写. - 拉里



2> gabr..:

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;

推荐阅读
yzh148448
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有