Delphi:TStringList.Contains?

问题描述 投票:0回答:3

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

例如:

List.AddObject('This is a string', customStringObject1); 
List.AddObject('This is a mushroom', customStringObject2); 
List.AddObject('Random stuff', customStringObject3); 

搜索 “This is a” 应该给我“true”,因为前两个元素部分包含此内容。

到目前为止我知道的唯一方法是

TStringList.find(string,integer)
,但这会执行完整的字符串比较,即仅搜索This is a string将返回true。

有什么建议吗?

delphi find compare tstringlist
3个回答
11
投票

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

Pos('This is a', List.Text)

如果您希望将其集成,您可以为 TStrings 创建一个类帮助器。


5
投票

不直接,不。您必须:

1) 在

Pos()
属性上调用
Text
,如果您有很多字符串,则效率不高。

2) 手动循环列表,在每个

Pos()
上调用
String
。效率更高,但编码也更多。

3) 从

TStringList
派生一个新类,并重写其虚拟
CompareStrings()
方法来根据需要比较字符串(默认实现简单地调用
AnsiCompareStr()
AnsiCompareText()
,具体取决于
CaseSensitive
属性)。如果找到匹配项,则返回 0。然后,您可以使用
TStringList.Find()
方法,该方法在内部调用
CompareStrings()
(请小心,
TStringList.Sort()
也是如此,但如果改为调用
TStringList.CustomSort()
则可以避免这种情况)。


0
投票

正如 Toon Krijthe 提到的,类助手可能是一个优雅的解决方案:

    TStringsHelper = class helper for TStrings
        function Contains(const s:string): Boolean;
    end;
    
    
    function TStringsHelper.Contains(const s:string): Boolean;
    begin
        Result := self.IndexOf(s) <> -1;
    end;

您可以致电:

    if list.Contains('some text') then
     ...
© www.soinside.com 2019 - 2024. All rights reserved.