お知らせ

電子会議

ライブラリ

パレット

Delphi FAQ検索

Delphi FAQ一覧

サンプル蔵





FDelphi FAQ
16番会議室「玉石混淆みんなで作るSample蔵」に寄せられたサンプル

"動的2次元配列クラス"






◆解説
  2次元の動的配列を実現するクラスのサンプルです。
  添え字は0からに固定で、double型です。
  Create時に大きさを指定し、その後大きさの変更はできません。(^^;

  Data[m,n: Integer]プロパティが default指定してあるのがミソ。

  Delphi4 では、動的配列が標準装備されちゃいましたから、ほと
  んど無駄なクラスかも知れませんが...(^_^;

◆動作確認
  Delphi3.1 + Win95a

◆実際のコード
----- ここから -----
interface

uses SysUtils;

type
  TMyArrayDData = array[0..99999] of Double;
  PMyArrayDData = ^TMyArrayDData;
  TMyArrayD = class
  private
    FDim1, FDim2: Integer;
    FData: PMyArrayDData;
    function GetData(m,n: Integer): Double;
    procedure SetData(m,n: Integer; Value: Double);
  public
    constructor Create(m,n: Integer);
    destructor Destroy; override;
    property Data[m,n: Integer]: Double
                  read GetData write SetData; default;
  end;

implementation

constructor TMyArrayD.Create(m,n: Integer);
begin
  inherited Create;
  FDim1 := m;
  FDim2 := n;
  if (FDim1 <= 0) or (FDim2 <= 0) then
    raise Exception.Create('Subscript out of range');
  FData := AllocMem(SizeOf(Double)* FDim1 * FDim2);
end;

destructor TMyArrayD.Destroy;
begin
  if FData <> nil then FreeMem(FData);
  inherited Destroy;
end;

function TMyArrayD.GetData(m,n: Integer): Double;
begin
  if (m < 0) or (m >= FDim1) or (n < 0) or (n >= FDim2) then
    raise Exception.Create('Subscript out of range');
  Result := FData^[m + FDim1*n];
end;

procedure TMyArrayD.SetData(m,n: Integer; Value: Double);
begin
  if (m < 0) or (m >= FDim1) or (n < 0) or (n >= FDim2) then
    raise Exception.Create('Subscript out of range');
  FData^[m + FDim1*n] := Value;
end;
----- ここまで -----

◆使用方法
var
  MyArray: TMyArrayD;
begin
  MyArray := TMyArrayD.Create(2, 3);

  とすれば、2×3の配列として MyArray[0,0] から MyArray[1,2]
  まで、Double型の2次元配列のように使えます。

  不要になったら MyArray.Free;で破棄するのをお忘れなく。

                                 98/12/01(火) 23:51 Satobe(JCG00336)

Original document by Satobe          氏 ID:(JCG00336)


ここにあるドキュメントは NIFTY SERVEの Delphi Users' Forum の16番会議室「玉石混淆みんなで作るSample蔵」に投稿されたサンプルです。これらのサンプルはボーランド株式会社がサポートする公式のものではありません。また、必ずしも動作が検証されているものではありません。これらのサンプルを使用したことに起因するいかなる損害も投稿者、およびフォーラムスタッフはその責めを負いません。使用者のリスクの範疇でご使用下さい。

Copyright 1996-2002 Delphi Users' Forum