お知らせ

電子会議

ライブラリ

パレット

Delphi FAQ検索

Delphi FAQ一覧

サンプル蔵





FDelphi FAQ
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