大阪本社 Mです。
前回に続きDelphiでのrecordの便利な使用方法を紹介
ジェネリクスのTListとrecordの組み合わせです。
早速いきましょう。
■サンプルコード■
-----------------------------------------------
type
// record型定義
TSyainRec = record
社員番号: integer;
氏名: string;
end;
・
・
・
・
var
// ジェネリクスのリスト
SyainList:TList<TSyainRec>;
SyainRec: TSyainRec;
i: integer;
begin
// ジェネリクスのリストを生成
SyainList := TList<TSyainRec>.create;
// 社員番号と社員名をリストに格納
SyainRec.社員番号 := 1;
SyainRec.氏名 := 'シンプル 太郎';
SyainList.Add(SyainRec);
SyainRec.社員番号 := 2;
SyainRec.氏名 := 'シンプル 次郎';
SyainList.Add(SyainRec);
SyainRec.社員番号 := 3;
SyainRec.氏名 := 'シンプル 三郎';
SyainList.Add(SyainRec);
// リストに追加したrecordのメンバー名でアクセス
for i := 0 to (SyainList.Count -1) do
begin
Writeln('社員番号:' ,SyainList[i].社員番号);
Writeln('氏名:' , SyainList[i].氏名);
end;
//リストを開放するだけでOK
SyainList.free;
end;
-----------------------------------------------
■実行結果■
-----------------------------------------------
社員番号:1
氏名:シンプル 太郎
社員番号:2
氏名:シンプル 次郎
社員番号:3
氏名:シンプル 三郎
-----------------------------------------------
こういう使い方をするとなんだか実行結果が
-----------------------------------------------
社員番号:3
氏名:シンプル 三郎
社員番号:3
氏名:シンプル 三郎
社員番号:3
氏名:シンプル 三郎
-----------------------------------------------
となりそうですが、そんなことはありません。
recordは参照型ではなく値型だからです。
一番のミソは
ジェネリクスのTListに追加したrecordはひとつひとつ開放する必要がないということ。
動的配列を使っているから、コンパイラが勝手に開放してくれます。
Delphiに動的配列があってよかった。
ジェネリクスのTListとrecordは相性良しですね。
では。