2009-10-23 87 views
1

我想使用通用字典的对象,他们的关键是一个字符串,并且该值是一个TDictionary。这可能吗?我不明白为什么不这样做,但我不知道添加到字典中的语法是什么。我尝试了一些东西,但不能完全正确。也许TPair必须以某种方式使用。如何添加到通用TList <Value,TDictionary>在德尔福

此代码演示了我正在尝试执行的操作(不编译,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

如果你的价值是一本字典,然后Cache.Add的第二个参数必须是一个字典。所以:

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

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

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.