代码之家  ›  专栏  ›  技术社区  ›  Alan Clark

如何添加到Delphi中的一般tlist<value,tdictionary>

  •  1
  • Alan Clark  · 技术社区  · 15 年前

    我尝试使用一个通用的对象字典,其中它们的键是一个字符串,值是一个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 回复  |  直到 14 年前
        1
  •  2
  •   Mason Wheeler    15 年前

    如果您的值是字典,则缓存。Add的第二个参数必须是字典。所以:

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

    但当值是对象时,请小心使用addorsetvalue。如果不小心,可能会导致内存泄漏。

        2
  •  1
  •   user394386    14 年前

    试试这个:

    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.