unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Contnrs, StdCtrls;
type
TMapEntry = class
Key: string;
Value: TObject;
constructor Create(K: string; V: TObject);
end;
TArrayMap = class
private
FList: TObjectList;
public
procedure Put(AEntry: TMapEntry); overload;
procedure Put(K: string; V: TObject); overload;
function Get(AKey: string): TObject;
function IndexOf(AKey: string): Integer;
// function GetKeys
procedure Remove(AKey: string);
function ContainKey(AKey: string): Boolean;
constructor Create;
destructor Destroy; override;
end;
TForm1 = class(TForm)
Edit1: TEdit;
ListBox1: TListBox;
Edit2: TEdit;
Edit3: TEdit;
Edit4: TEdit;
Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
FMap: TArrayMap;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
{ TArrayMap }
function TArrayMap.ContainKey(AKey: string): Boolean;
begin
case IndexOf(AKey) of
-1: Result := false;
else Result := true;
end;
end;
constructor TArrayMap.Create;
begin
inherited;
FList := TObjectList.Create;
FList.OwnsObjects := true;
end;
destructor TArrayMap.Destroy;
begin
FreeAndNil(FList);
end;
function TArrayMap.Get(AKey: string): TObject;
var Index: Integer;
begin
Index := IndexOf(AKey);
if Index >= 0 then
Result := TMapEntry(FList[Index]).Value
else
Result := nil;
end;
procedure TArrayMap.Put(AEntry: TMapEntry);
begin
Put(AEntry.Key, AEntry.Value);
end;
function TArrayMap.IndexOf(AKey: string): Integer;
var I: Integer;
begin
Result := -1;
for I := 0 to FList.Count - 1 do
begin
if TMapEntry(FList[I]).Key = AKey then
begin
Result := I;
Exit;
end;
end;
end;
procedure TArrayMap.Put(K: string; V: TObject);
begin
if ContainKey(K) then
ShowMessage('Key: ' + K + ' Duplicate!')
else
FList.Add(TMapEntry.Create(K, V))
end;
procedure TArrayMap.Remove(AKey: string);
var Index: Integer;
begin
Index := IndexOf(AKey);
if Index >= 0 then
FList.Delete(Index);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
FMap := TArrayMap.Create;
FMap.Put(TMapEntry.Create(Edit1.Name, Edit1));
FMap.Put(TMapEntry.Create(Edit2.Name, Edit2));
FMap.Put(TMapEntry.Create(Edit3.Name, Edit3));
FMap.Put(TMapEntry.Create(Edit4.Name, Edit4));
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
FreeAndNil(FMap);
end;
{ TMapEntry }
constructor TMapEntry.Create(K: string; V: TObject);
begin
Key := K;
Value := V;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
// FMap.Remove('A2');
// TEdit(FMap.Get('A2')).Text := '---------------';
FMap.Put('a', TObject('b'));
FMap.Put('a', TObject('b'));
end;
end.
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Contnrs, StdCtrls;
type
TMapEntry = class
Key: string;
Value: TObject;
constructor Create(K: string; V: TObject);
end;
TArrayMap = class
private
FList: TObjectList;
public
procedure Put(AEntry: TMapEntry); overload;
procedure Put(K: string; V: TObject); overload;
function Get(AKey: string): TObject;
function IndexOf(AKey: string): Integer;
// function GetKeys
procedure Remove(AKey: string);
function ContainKey(AKey: string): Boolean;
constructor Create;
destructor Destroy; override;
end;
TForm1 = class(TForm)
Edit1: TEdit;
ListBox1: TListBox;
Edit2: TEdit;
Edit3: TEdit;
Edit4: TEdit;
Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
FMap: TArrayMap;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
{ TArrayMap }
function TArrayMap.ContainKey(AKey: string): Boolean;
begin
case IndexOf(AKey) of
-1: Result := false;
else Result := true;
end;
end;
constructor TArrayMap.Create;
begin
inherited;
FList := TObjectList.Create;
FList.OwnsObjects := true;
end;
destructor TArrayMap.Destroy;
begin
FreeAndNil(FList);
end;
function TArrayMap.Get(AKey: string): TObject;
var Index: Integer;
begin
Index := IndexOf(AKey);
if Index >= 0 then
Result := TMapEntry(FList[Index]).Value
else
Result := nil;
end;
procedure TArrayMap.Put(AEntry: TMapEntry);
begin
Put(AEntry.Key, AEntry.Value);
end;
function TArrayMap.IndexOf(AKey: string): Integer;
var I: Integer;
begin
Result := -1;
for I := 0 to FList.Count - 1 do
begin
if TMapEntry(FList[I]).Key = AKey then
begin
Result := I;
Exit;
end;
end;
end;
procedure TArrayMap.Put(K: string; V: TObject);
begin
if ContainKey(K) then
ShowMessage('Key: ' + K + ' Duplicate!')
else
FList.Add(TMapEntry.Create(K, V))
end;
procedure TArrayMap.Remove(AKey: string);
var Index: Integer;
begin
Index := IndexOf(AKey);
if Index >= 0 then
FList.Delete(Index);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
FMap := TArrayMap.Create;
FMap.Put(TMapEntry.Create(Edit1.Name, Edit1));
FMap.Put(TMapEntry.Create(Edit2.Name, Edit2));
FMap.Put(TMapEntry.Create(Edit3.Name, Edit3));
FMap.Put(TMapEntry.Create(Edit4.Name, Edit4));
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
FreeAndNil(FMap);
end;
{ TMapEntry }
constructor TMapEntry.Create(K: string; V: TObject);
begin
Key := K;
Value := V;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
// FMap.Remove('A2');
// TEdit(FMap.Get('A2')).Text := '---------------';
FMap.Put('a', TObject('b'));
FMap.Put('a', TObject('b'));
end;
end.