Delphi XE2オンラインヘルプ(およびEmbarcadero DocWiki)は、TObjectDictionary
のドキュメントが非常に薄いです(または、私はそれを見つけるのが愚かすぎます)。
私が理解している限り、文字列キーを介してアクセスできるオブジェクトインスタンスを格納するために使用できます(基本的には、ソートされたTStringList
で常に可能でしたが、タイプセーフです)。しかし、実際にそれを宣言して使用する方法に迷っています。
ポインタはありますか?
TObjectDictionary
と TDictionary
の主な違いは、追加されたキーや値の所有権を指定するメカニズムを提供することです。コレクション(辞書)に追加するので、これらのオブジェクトを解放することを心配する必要はありません。
この基本的なサンプルを確認してください
{$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.
TDictionary
の使用方法に関する完全なサンプルについては、このリンクを確認してください Generics Collections TDictionary(Delphi) (TObjectDictionaryとの唯一の違いは、キーや値の所有権です。コンストラクターで指定されているため、同じ概念が両方に適用されます)