加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

哪个是在delphi TDictionary中找到最大值的最佳方法?

发布时间:2020-12-15 04:16:51 所属栏目:大数据 来源:网络整理
导读:我有一个TDictionary声明像TDictionary String,Integer,现在我想获得存储在TDictionary中的最大值.我可以迭代TDictionary并比较值,但我想知道存在更好的方法吗?是否存在任何函数或者字典可以按值排序以检索存储的最大值? 这就是我现在正在做的事情 var MyD
我有一个TDictionary声明像TDictionary< String,Integer>,现在我想获得存储在TDictionary中的最大值.我可以迭代TDictionary并比较值,但我想知道存在更好的方法吗?是否存在任何函数或者字典可以按值排序以检索存储的最大值?

这就是我现在正在做的事情

var
   MyDict       : TDictionary<String,Integer>;
   MaxValue,i  : Integer;
begin
   MyDict:=TDictionary<String,Integer>.Create;
   try    
     MyDict.Add('this',1);
     MyDict.Add('is',7);
     MyDict.Add('a',899);
     MyDict.Add('sample',1000);
     MyDict.Add('finding',12);
     MyDict.Add('the',94);
     MyDict.Add('max',569);
     MyDict.Add('value',991);

     MaxValue:=MyDict.ToArray[0].Value;
     for i in MyDict.Values do
      if i>MaxValue then MaxValue:=i;

     ShowMessage(Format('The max value is %d',[MaxValue]));
   finally
     MyDict.Free;
   end;
end;

解决方法

您是否要删除项目或减少项目的数量?如果没有,您可以考虑创建一个TDictionary的新后代,您可以在其中覆盖Add()方法并跟踪到目前为止添加的最大项目.下面的代码是伪代码,并不完全正确. (例如,我认为Add()应该覆盖一个函数,但我把它编码为一个过程).但它给出了一般的想法.当然,此代码仅跟踪一个项目:最近添加的最大项目.如果您需要列出所有具有最大计数的项目,则可以保留字符串列表而不是fLargestWordSoFar和fLargestCountSoFar.

即使您在添加项目之后递增项目的计数,您也可以扩展下面的代码,以类似于Add()的方式处理它.

type
  MyTDictionary = object(TDictionary) // almost definitely not correct syntax here...
  private
    fLargestCountSoFar: Integer;
    fLargestWordSoFar: String;   
  public
    procedure Add( S: String; I:Integer); override;   
  end;

implementation

procedure MyTDictionary.Add( S: String; I:Integer); 
begin
  if (I > fLargesteCountSoFar) then
  begin
    fLargestCountSoFar := I;
    fLargestWordSoFar  := S;    
  end;
  inherited Add( S,I);
 end;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读