Delphi:TStringList.Contains?

ott*_*uit 6 delphi compare tstringlist find

Delphi 2007中是否有任何集成解决方案来检查TStringList是否包含某个值的一部分?

例如:

List.AddObject('This is a string', customStringObject1); 
List.AddObject('This is a mushroom', customStringObject2); 
List.AddObject('Random stuff', customStringObject3); 
Run Code Online (Sandbox Code Playgroud)

搜索"这是一个"应该给我"真实",因为前两个元素包含这个部分.

到目前为止我唯一知道的方法是TStringList.find(string,integer),但这会执行完整的字符串比较,即只搜索这是一个字符串将返回true.

有什么建议?

Too*_*the 10

未集成,但您可以在Text属性上使用Pos函数:

Pos('This is a', List.Text)
Run Code Online (Sandbox Code Playgroud)

如果你想要它被集成,你可以为TStrings创建一个类助手.


Rem*_*eau 5

不直接,没有.你必须要么:

1)调用Pos()Text属性,如果你有很多字符串的效率不高.

2)手动循环遍历列表,调用Pos()每个String.更高效,但也更多编码.

3)从中派生一个新类TStringList并覆盖其虚拟CompareStrings()方法,以便根据需要比较字符串(默认实现简单调用,AnsiCompareStr()或者AnsiCompareText(),取决于CaseSensitive属性).如果找到匹配则返回0.然后TStringList.Find(),您可以使用CompareStrings()内部调用的方法(请注意TStringList.Sort(),但是如果您调用则可以避免这种情况TStringList.CustomSort()).