Here is a simple example of using the Dictionary.
unit Unit2;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs,
System.Generics.Collections, Vcl.StdCtrls;
type
TPessoa = class
id: integer;
nome: string;
sobrenome: string;
idade: integer;
sexo: string;
end;
TListaPessoa = TObjectList<TPessoa>;
TForm2 = class(TForm)
btnBuscarPessoa: TButton;
procedure FormCreate(Sender: TObject);
procedure btnBuscarPessoaClick(Sender: TObject);
private
FListaPessoa: TListaPessoa;
FDicionarioPessoa: TDictionary<integer, TPessoa>;
procedure AdicionarPessoas;
procedure AlimentarDicionario;
end;
var
Form2: TForm2;
implementation
uses
StrUtils;
{$R *.dfm}
procedure TForm2.AdicionarPessoas;
var
i: integer;
begin
for i := 1 to 10000 do
begin
FListaPessoa.Add(TPessoa.Create);
FListaPessoa.Last.id := i;
FListaPessoa.Last.nome := 'Nome' + IntToStr(Random(1000));
FListaPessoa.Last.sobrenome := 'Sobrenome' + IntToStr(Random(1000));
FListaPessoa.Last.idade := Random(80);
FListaPessoa.Last.sexo := IfThen(odd(FListaPessoa.Last.id + FListaPessoa.Last.idade), 'M', 'F');
end;
end;
procedure TForm2.AlimentarDicionario;
var
FPessoa: TPessoa;
begin
for FPessoa in FListaPessoa do
if (not(FDicionarioPessoa.ContainsKey(FPessoa.id))) then
FDicionarioPessoa.Add(FPessoa.id, FPessoa);
end;
procedure TForm2.FormCreate(
Sender:
TObject);
begin
FListaPessoa := TListaPessoa.Create;
FDicionarioPessoa := TDictionary<integer, TPessoa>.Create;
AdicionarPessoas;
AlimentarDicionario;
end;
procedure TForm2.btnBuscarPessoaClick(Sender: TObject);
var
identificador: integer;
begin
identificador := Random(10000);
ShowMessage(
'A pessoca com o id ' + IntToStr(identificador) + ' é ' + FDicionarioPessoa.Items[identificador].nome + ' ' + FDicionarioPessoa.Items[identificador].sobrenome +
' tem ' + IntToStr(FDicionarioPessoa.Items[identificador].idade) + ' anos de idade e é do sexo ' +
IfThen(FDicionarioPessoa.Items[identificador].sexo = 'M', 'masculino', 'feminino')
);
end;
end.
Note that the legal methods of the Dictionary are ContainsKey
or ContainsValue
.
Note: In the test I did, I put 7000000 records, and the search is instantaneous.
Note: Data ordering is also quick with Data Dictionary.