El Delphi XE2 ayuda en línea (así como el Embarcadero DocWiki) es muy delgada en la documentación de TObjectDictionary (o yo soy demasiado estúpido para encontrarlo).

Tan lejos como yo lo entiendo, puede ser utilizado para almacenar las instancias de objeto que se puede acceder a través de la cadena de claves (básicamente lo que siempre fue posible con un criterio de TStringList pero typesafe). Pero estoy en una pérdida en cuanto a la forma de declarar y usar.

Alguna sugerencia?

Las claves en un TDictionary o TObjectDictionary no tiene que ser cadenas. Estos pueden ser de cualquier tipo. El valores en un TObjectDictionary debe extender TObject, mientras que TDictionary puede almacenar valores de cualquier tipo.

OriginalEl autor dummzeuch | 2011-12-11

1 Comentario

  1. 27

    La principal diferencia entre un TObjectDictionary y un TDictionary es que proporciona un mecanismo para especificar la Titularidad de las llaves y/o de los valores agregados a la colección (diccionario), Así que usted no necesita preocuparse acerca de la libertad de esos objetos.

    Comprobar esta muestra básico

    {$APPTYPE CONSOLE}    
    {$R *.res}
    uses
      Generics.Collections,
      Classes,
      System.SysUtils;
    
    
    Var
      MyDict  : TObjectDictionary<String, TStringList>;
      Sl      : TStringList;
    begin
      ReportMemoryLeaksOnShutdown:=True;
      try
       //here i'm  creating a TObjectDictionary with the Ownership of the Values 
       //because in this case the values are TStringList
       MyDict := TObjectDictionary<String, TStringList>.Create([doOwnsValues]);
       try
         //create an instance of the object to add
         Sl:=TStringList.Create;
         //fill some foo data
         Sl.Add('Foo 1');
         Sl.Add('Foo 2');
         Sl.Add('Foo 3');
         //Add to dictionary
         MyDict.Add('1',Sl);
    
         //add another stringlist on the fly 
         MyDict.Add('2',TStringList.Create);
         //get an instance  to the created TStringList
         //and fill some data
         MyDict.Items['2'].Add('Line 1');
         MyDict.Items['2'].Add('Line 2');
         MyDict.Items['2'].Add('Line 3');
    
    
         //finally show the stored data
         Writeln(MyDict.Items['1'].Text);
         Writeln(MyDict.Items['2'].Text);        
       finally
         //only must free the dictionary and don't need to worry for free the TStringList  assignated to the dictionary
         MyDict.Free;
       end;
      except
        on E: Exception do
          Writeln(E.ClassName, ': ', E.Message);
      end;
      Readln;
    end.

    Revise este enlace Los Medicamentos Genéricos Colecciones TDictionary (Delphi) para una muestra completa acerca de cómo utilizar un TDictionary (recuerde que la única diferencia con el TObjectDictionary es la Posesión de las llaves y/o valores que se especifica en el constructor, por Lo que el mismo concepto se aplica a ambos)

    +1 el Uso de doOwnsKeys si desea un tratamiento similar para las llaves

    OriginalEl autor RRUZ

Dejar respuesta

Please enter your comment!
Please enter your name here