德尔福:包含列表



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) ,但这执行了完整的字符串比较,即仅搜索这是一个字符串才会返回 true。

有什么建议吗?

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

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

如果您希望集成它,则可以为TStrings创建一个类帮助程序。

不是直接的,不是。 您必须:

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

2)手动循环列表,在每个String上调用Pos()。 更高效,但也更编码。

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

相关内容

  • 没有找到相关文章

最新更新