gpt4 book ai didi

delphi - 如何搜索通用 TList 集合?

转载 作者:行者123 更新时间:2023-12-03 14:42:09 24 4
gpt4 key购买 nike

Possible Duplicate:
How can I search a generic TList for a record with a certain field value?

我收集了

TList<TActivityCategory>

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

我在 TList<> 中看到 BinarySearch,但这需要 TActivityCategory 的实例。我只想传递名称字符串。

我该如何去做呢?

最佳答案

创建列表时,您可以传入比较器。 Generics.Defaults 单元中有一些比较器类,您可以在其中传递一些匿名方法来比较两个元素。它们用于多种方法,例如 IndexOf、Contains 或 Sort。

示例:

uses
Generics.Defaults,
Generics.Collections;

type
TActivityCategory = class
private
FName: string;
public
constructor Create(const Name: string);
property Name: string read FName write FName;
end;

constructor TActivityCategory.Create(const Name: string);
begin
FName := Name;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
activities: TList<TActivityCategory>;
search: TActivityCategory;
begin
activities := TObjectList<TActivityCategory>.Create(
TDelegatedComparer<TActivityCategory>.Create(
function(const Left, Right: TActivityCategory): Integer
begin
Result := CompareText(Left.Name, Right.Name);
end));

activities.Add(TActivityCategory.Create('Category B'));
activities.Add(TActivityCategory.Create('Category C'));
activities.Add(TActivityCategory.Create('Category A'));

search := TActivityCategory.Create('Category C');
if activities.Contains(search) then
ShowMessage('found');

ShowMessageFmt('Index: %d', [activities.IndexOf(search)]);
activities.Sort;
ShowMessageFmt('Index: %d', [activities.IndexOf(search)]);


search.Name := 'Category D';
if not activities.Contains(search) then
ShowMessage('not found');

search.Free;
activities.Free;
end;

关于delphi - 如何搜索通用 TList<T> 集合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8054558/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com