Sự khác biệt chính giữa TObjectDictionary
và TDictionary
là cung cấp cơ chế chỉ định Quyền sở hữu khóa và/hoặc giá trị được thêm vào bộ sưu tập (từ điển), Vì vậy, bạn không cần lo lắng về việc giải phóng các đối tượng này.
Kiểm tra mẫu cơ bản này
{$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.
Kiểm tra liên kết này Generics Collections TDictionary (Delphi) cho một mẫu đầy đủ về cách sử dụng một TDictionary
(nhớ sự khác biệt chỉ với TObjectDictionary là sở hữu của các phím và/hoặc giá trị được chỉ định trong hàm tạo, Vì vậy, các khái niệm tương tự áp dụng cho cả hai)
Các khóa trong từ điển TDictionary hoặc TObjectDictionary không phải là chuỗi. Chúng có thể là bất kỳ loại nào. Các * giá trị * trong một TObjectDictionary phải mở rộng TObject, trong khi TDictionary có thể lưu trữ các giá trị của bất kỳ loại nào. – awmross