Delphi 将TDictionary排序为数组后正确处理它的方法

Delphi 将TDictionary排序为数组后正确处理它的方法,delphi,memory-management,delphi-xe,tdictionary,Delphi,Memory Management,Delphi Xe,Tdictionary,我有一本字典 target_results : TDictionary<longint,double>; 由于您的数据是longints和double,这两种类型都是值类型,因此释放字典就可以了。您的数组将包含原始值的副本,您无需担心丢失或损坏任何内容 如果您有对象类型,并且您有一个拥有对象的TObjectDictionary,那么您就必须担心这类事情,但是对于纯数字数据,您就可以了。我不明白您为什么使用字典。看起来应该是TList。@DavidHeffernan我正在执行一系列查

我有一本字典

target_results : TDictionary<longint,double>;

由于您的数据是longints和double,这两种类型都是值类型,因此释放字典就可以了。您的数组将包含原始值的副本,您无需担心丢失或损坏任何内容


如果您有对象类型,并且您有一个拥有对象的
TObjectDictionary
,那么您就必须担心这类事情,但是对于纯数字数据,您就可以了。

我不明白您为什么使用字典。看起来应该是TList。@DavidHeffernan我正在执行一系列查询以确定最终分数。每个查询都会带来一组小计总分。我使用TDictionary.AddOrSetValue添加新条目或将小计添加到现有密钥。你认为这是最有效的结构来适应这个吗?谢谢如果您正在执行键查找,那么字典是很好的选择。当然,这方面不在Q中,因此我提出了疑问。但看起来您的数据结构是正确的。请澄清:AddOrSetValue不会将小计添加到现有值中,它只会用新的小计覆盖任何现有值。@uwerabe谢谢。在添加小计之前,我使用TryGetValue检索可能已经存在的值。
type
  TSearchResult = TPair<longint,double>;

var
 target_results_array : TArray<TSearchResult>;

target_results_array:= target_results.ToArray;
TArray.Sort<TSearchResult>(best_knowledge_search_results,
                    TComparer<TSearchResult>.Construct(
                              function(const L, R: TSearchResult): Integer
                              begin
                                if L.Value < R.Value then Result := 1 else if L.Value > R.Value then Result := -1 else Result := 0;
                              end
                    ));
target_results.Free;