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