2009-10-23 3 views
1

Я пытаюсь использовать общий словарь объектов, где они являются строкой, а значение TDictionary. Это возможно? Я не понимаю, почему нет, но я не знаю, какой синтаксис должен был бы добавить в словарь. Я пробовал несколько вещей, но не могу понять. Возможно, TPair нужно как-то использовать.Как добавить к общему TList <Value, TDictionary> в Delphi

Этот код демонстрирует то, что я пытаюсь сделать (он не компилируется, не хватает параметров в 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. 
Смежные вопросы