如何在Delphi中添加通用TList <value,tdictionary =“”> </value,>

时间:2009-10-23 01:33:00

标签: delphi

我正在尝试使用对象的通用字典,其中key是一个字符串,值是TDictionary。这可能吗?我不明白为什么不,但我不知道添加到字典的语法是什么。我尝试了一些东西,但不能完全正确。也许必须以某种方式使用TPair。

此代码演示了我正在尝试做的事情(它没有编译,AddOrSetValue中没有足够的参数)。

program DictTest;

{$APPTYPE CONSOLE}

uses
  SysUtils, Generics.Collections;

type
  TLookup = TDictionary<integer, integer>;
  TCache = TDictionary<string, TLookup>;

var
  Cache : TCache;

begin
  Cache := TCache.Create;
  try
    Cache.AddOrSetValue['Hi', ([1, 2])];
  finally
    Cache.Free;
  end;
end.

2 个答案:

答案 0 :(得分:2)

如果您的Value是字典,则Cache.Add的第二个参数必须是字典。所以:

Cache.AddOrSetValue('Hi', TLookup.Create);
Cache['Hi'].AddOrSetValue(1, 2);

但是当值是对象时要小心使用AddOrSetValue。如果你不小心,最终可能会导致内存泄漏。

答案 1 :(得分:1)

试试这个:

program DictTest; 

{$APPTYPE CONSOLE} 

uses 
  SysUtils, Generics.Collections; 

type 
  TLookup = TDictionary<integer, integer>; 
  TCache = TDictionary<string, TLookup>; 

var 
  Cache : TCache; 
  ALookup: TLookup;
begin 
  Cache := TCache.Create; 
  try 
    ALookup := TLookup.Create;
    ALookup.Add(1, 2);
    Cache.AddOrSetValue['Hi', ALookup]; 
  finally 
    Cache.Free; 
  end; 
end.