delphi – 如何在通用TList中搜索具有特定字段值的记录?

delphi – 如何在通用TList中搜索具有特定字段值的记录?,第1张

概述关于通用TList的一切.我有这个结构: Type TExtract = record Wheel: string; Extract: array [1..5] of Byte; end; TExtractList = TList<TExtract> TEstr = record Date: TDate; Extract: TExtractLis 关于通用TList的一切.我有这个结构:
Type  TExtract = record    Wheel: string;    Extract: array [1..5] of Byte;  end;  TExtractList = TList<TExtract>  TEstr = record    Date: TDate;    Extract: TExtractList;  end;  TEstrList = TList<TEstr>;

主要列表是TExtrList,在这个列表中我有所有日期和日期所有轮子与该日期.我想搜索是否存在日期.如果不存在,我从TEstr中添加提取的子列表TExtractList信息.当我从TExtrList搜索Delphi问我关于TEstr类型.我只需要搜索日期.那么如何在通用TList中搜索单个字段

PS:我删除了上一篇文章,因为在这里我试图更好地解释.

解决方法 再来一次.

你应该使用内置的TList< T> .BinarySearch()函数,即使它正确地要求TEstr记录作为参数.您首先需要使用TList< T> .sort()使用与搜索相同的条件对列表进行排序,然后调用BinarySearch()来查找您的记录.

这是一个兼具(排序和搜索)功能的函数:

uses Generics.Defaults; // this provIDes TDelegatedCompareruses Math; // this provIDes Sign()function SearchList(Date:TDate; Sort:Boolean; List:TList<TEstr>): Integer;var Comparer: IComparer<TEstr>;    Dummy: TEstr;begin  // Prepare a custom comparer that'll be used to sort the List  // based on Date alone,and later to BinarySearch the List using  // date alone.  Comparer := TDelegatedComparer<TEstr>.Construct(    function (const L,R: TEstr): Integer    begin      Result := Sign(L.Date - R.Date);    end  );  // If the List is not sorted,sort it. We don't kNow if it's sorted or not,// so we rely on the "Sort" parameter  if Sort then List.sort(Comparer);  // Prepare a Dummy TEstr record we'll use for searching  Dummy.Date := Date;  // Call BinarySearch() to look up the record based on Date alone  if not List.BinarySearch(Dummy,Result,Comparer) then    Result := -1;end;

BinarySearch假定列表已排序(这是二进制搜索的本质!).在第一次调用时,您需要设置Sort = True,以便正确排序列表.在后续调用中,Sort应为False.当然,在实际使用中,您可能有单独的搜索和排序例程,并且您可能将它们作为从TList< TEstr>降序的类的方法. (使事情更轻松).为了dempnstration的目的,我将两者放在同一个例程中.

总结

以上是内存溢出为你收集整理的delphi – 如何在通用TList中搜索具有特定字段值的记录?全部内容,希望文章能够帮你解决delphi – 如何在通用TList中搜索具有特定字段值的记录?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1277342.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-09
下一篇 2022-06-09

发表评论

登录后才能评论

评论列表(0条)

保存