3

私はTDictionaryを持っています。それは広範なループで満たされています。ループが終了したら、より多くのスコア(整数)を持つ10個のキー(文字列)を取得する必要があります。これを達成するための最も効率的な方法は何でしょうか?

Objective-C(Cocoa)では私はそれを次のように行います:

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

次に、新しくソートされた配列を繰り返します。Delphiでそれを行うにはどうすればよいですか?

4

2 に答える 2

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
  )
);

ディクショナリが非常に大きい場合、これは最も効率的なソリューションではありません。一方、これはおそらく最も迅速かつ簡単に実装できる方法です。

于 2012-04-26T15:26:08.050 に答える
0

マップ (辞書) としてアクセスする必要がありますか、それとも単純な配列で十分ですか?

マップとして持っている必要がある場合は、DeHL.Collectionsを見てみましょう。おそらくDeHL.Collections.DoubleSortedBidiMap必要なことを行います。プロジェクトページには製造中止と書いてありますが、毎日使っていますが問題ありません。

于 2012-04-26T14:47:55.360 に答える