|
16番会議室「玉石混淆みんなで作るSample蔵」に寄せられたサンプル
"2次元データリスト TD2WordList"
こんにちは、妙義のかたつむりです
TStringList を真似して
作った、2次元データリスト TD2WordList です
とても速いので、作者自身びっくりしてます ( ゚O゚)w
TList に new() したレコードを持たせるより
1桁は速いようです
やっぱ、Delphi のソースはすごいなぁって
勉強になりました
{ TStringList class } のデータは (string, TObject) なんですが
TStringItem = record
FString: string;
FObject: TObject;
end;
{ TD2Words class } のデータは (word, word) にしました
TD2WordItem = record
x: word;
y: word;
end;
動作に最小限必要なメソッド
Add, Clear, Delete, Insert を持っています
読み出し用のプロパティは
Count, Data.x, Data.y です
--------- 動作試験用サンプルコード -----------
フォームにメモとボタンを1つずつ貼り付けます
DL: TD2WordList;
procedure TForm1.FormCreate(Sender: TObject);
begin
DL:= TD2WordList.Create;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
DL.free;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
ii: integer;
newDL: TD2WordList;
procedure show(aDL: TD2WordList);
begin
memo1.lines.add('');
memo1.lines.add(format('DL[%D] = (%8D, %8D)', [ii, aDL[ii].x, aDL[ii].y]));
memo1.lines.add(format('DL[%D] = (%8D, %8D)', [ii + 1, aDL[ii + 1].x, aDL[ii + 1].y]));
memo1.lines.add(format('DL[%D] = (%8D, %8D)', [ii + 2, aDL[ii + 2].x, aDL[ii + 2].y]));
memo1.lines.add(format('DL.Count = %8D', [aDL.Count]));
memo1.lines.add('');
end;
begin
DL.Clear;
memo1.lines.clear;
for ii:= 0 to 10000 do begin // 動作の速い機種なら百万でも一瞬です
DL.Add(ii, ii * 2);
end;
Randomize;
// Add, Data 書き込み、読み出し試験
ii:= random(10000);
memo1.lines.add(format(' 読み出し試験:index = DL[%D])', [ii]));
show(DL);
// Delete 削除試験
ii:= random(10000);
memo1.lines.add(format(' 削除試験:index = DL[%D])', [ii + 1]));
show(DL);
DL.Delete(ii + 1);
memo1.lines.add('↓');
show(DL);
// Insert 挿入試験
ii:= random(10000);
memo1.lines.add(format(' 挿入試験:index = DL[%D] = (0, 0)', [ii + 1]));
show(DL);
DL.Insert(ii + 1, 0, 0);
memo1.lines.add('↓');
show(DL);
// Assign, Create, Free コピー試験
ii:= random(10000);
memo1.lines.add(format(' コピー試験:index = DL[%D])', [ii]));
show(DL);
newDL:= TD2WordList.Create;
try
newDL.Assign(DL);
memo1.lines.add('↓');
show(newDL);
finally
newDL.Free;
end;
end;
------- ソース ------------
ソースは長すぎて1回の送信では入りません
(300行を越えちゃいました)
次の発言でアップします
00/02/23(水) 11:37 妙義のかたつむり(QWK05270) __@ノ'
Original document by 妙義のかたつむり氏 ID:(QWK05270)
ここにあるドキュメントは NIFTY SERVEの Delphi Users' Forum の16番会議室「玉石混淆みんなで作るSample蔵」に投稿されたサンプルです。これらのサンプルはボーランド株式会社がサポートする公式のものではありません。また、必ずしも動作が検証されているものではありません。これらのサンプルを使用したことに起因するいかなる損害も投稿者、およびフォーラムスタッフはその責めを負いません。使用者のリスクの範疇でご使用下さい。
Copyright 1996-2002 Delphi Users' Forum
|