自上而下迭代泛型集合(TDictionary)

时间:2012-04-26 14:25:03

标签: delphi sorting collections delphi-xe

我有一个TDictionary。它充满了广泛的循环。当循环结束时,我需要检索具有更多分数(整数)的10个键(字符串)。什么是最有效的方法来实现这一目标?

在Objective-C(Cocoa)中,我这样做:

NSArray *top_words_sorted_array = [top_words_dictionary keysSortedByValueUsingSelector:@selector(compare:)];

然后迭代新排序的数组。我怎么能在Delphi中做到这一点?

2 个答案:

答案 0 :(得分:5)

Cocoa代码的等效Delphi代码是:

type
  TScorePair = TPair<string,Integer>;
var
  ScoresArray: TArray<TScorePair>;
....
ScoresArray := Scores.ToArray;
TArray.Sort(ScoresArray,
  TComparer<TScorePair>.Construct( 
    function(const L, R: TScorePair): Integer
    begin
      Result := R.Value - L.Value;
    end
  )
);

如果您的词典非常大,那么这将不是最有效的解决方案。另一方面,它可能是最快捷,最简单的实施方法。

答案 1 :(得分:0)

您是否需要以地图(字典)或普通数组的形式访问它?

如果你必须将它作为地图,我会看一下DeHL.Collections,或许DeHL.Collections.DoubleSortedBidiMap做你需要的。项目页面说它已经停产,但我每天都使用它,从来没有问题。