如何搜索通用TList <t>集合?</t>

时间:2011-11-08 17:26:04

标签: delphi generics tlist

  

可能重复:
  How can I search a generic TList for a record with a certain field value?

我有一个

的集合
TList<TActivityCategory>

TActivityCategory有一个String类型的Name属性,我想使用Name属性搜索TList。

我在TList中看到BinarySearch&lt;&gt;但这需要一个TActivityCategory实例。我只想传递一个名字的字符串。

我将如何做到这一点?

2 个答案:

答案 0 :(得分:2)

坦率地说,考虑到基于比较器的方法所需的所有锅炉板,编写自己的搜索程序可能最简单:

type
  TActivityCategoryList = class(TList<TActivityCategory>)
  public
    function Find(const Name: string): Integer;
  end;

function TActivityCategoryList.Find(const Name: string): Integer;
begin
  for Result := 0 to Count-1 do
    if Self[Result].Name=Name then
      exit;
  Result := -1;
end;

答案 1 :(得分:1)

如果您没有要搜索的实例,则必须自己进行搜索。有三种基本方法可以做到这一点:

  • 二进制搜索:实施您自己的二进制搜索。这仅在列表已排序时才有效。
  • 线性搜索:实施您自己的线性搜索。这将始终有效,但在大型列表中,它比二进制搜索慢得多。
  • 词典查找:在列表旁边保留TDictionary<string, TActivityCategory>。不需要搜索,但您需要编写一些代码来保持两者同步。