type TRen = record
  name: string;
  age: Integer;
end;

type TPeople = class
  private
    Fname: string;
    Fage: Integer;
    procedure Setname(const Value: string);
    procedure Setage(const Value: Integer);
  published
  property name: string read Fname write Setname;
  property age: Integer read Fage write Setage;
end;

procedure TForm3.Button1Click(Sender: TObject);
var
  MyRen: TRen;
  MyDic: TDictionary<string,TRen>;
  I: Integer;
  MyKeyAry: TArray<string>;
  MyRen2: TRen;
begin
  MyDic := TDictionary<string,TRen>.Create();
  try
    //---------------------------------------
    for I := 0 to 2 do
    begin
      MyRen.name := '群主'+IntToStr(I);
      MyRen.age := I;
      MyDic.Add('key'+IntToStr(I),MyRen);
    end;

    //---------------------------------------
    MyKeyAry := MyDic.Keys.ToArray;
    for I := 0 to MyDic.Count-1 do
    begin
      MyRen2 := MyRen;
      MyRen2.name := '操蛋'+IntToStr(I);
      MyDic.AddOrSetValue(MyKeyAry[I],MyRen2);
    end;

    ShowMessage(MyDic['key1'].name);
  finally
    MyDic.Free;
  end;
end;

{ TPeople }

procedure TPeople.Setage(const Value: Integer);
begin
  Fage := Value;
end;

procedure TPeople.Setname(const Value: string);
begin
  Fname := Value;
end;

procedure TForm3.Button2Click(Sender: TObject);
var
  MyPeople: TPeople;
  MyDic: TObjectDictionary<string,TPeople>;
  I: Integer;
  MyKeyAry: TArray<string>;
begin
  MyDic := TObjectDictionary<string,TPeople>.Create();
  try
    //---------------------------------------
    for I := 0 to 2 do
    begin
      MyPeople := TPeople.Create;
      MyPeople.name := '群主'+IntToStr(I);
      MyPeople.age := I;
      MyDic.Add('key'+IntToStr(I),MyPeople);
    end;

    //---------------------------------------
    MyKeyAry := MyDic.Keys.ToArray;
    for I := 0 to MyDic.Count-1 do
    begin
      //这里如果是结构就不能这样赋值,如果是对象就可以.
      MyDic[MyKeyAry[I]].name := '操蛋'+IntToStr(I);
    end;

    //---------------------------------------
    //窗体显示
    ShowMessage(MyDic['key1'].name);

    //---------------------------------------
    //用这种方式释放吧,不搞了,以后就用这种方式来.
    for I := 0 to MyDic.Count-1 do
    begin
      MyDic[MyKeyAry[I]].Free;
    end;
  finally
    MyDic.Free;
  end;
end;

 

posted on 2015-04-02 11:53  del88  阅读(460)  评论(0编辑  收藏  举报