哪个是在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; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |