Ejemplo para el uso de medicamentos Genéricos.Las colecciones.TObjectDictionary

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 respuesta

  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

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *