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

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

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


然后迭代新的排序数组。我该如何在Delphi中做到?

最佳答案

与您的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
  )
);


如果您的字典很大,那么这将不是最有效的解决方案。另一方面,它可能是最快,最容易实现的方法。

关于delphi - 自上而下地遍历通用集合(TDictionary),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10335457/

10-09 01:33