文字列を使おう では、文字列というものは、 1 文字 1 文字が整列して並んでいるものだと いう事が分かりました。そして、その文字列の個々の 1 文字にアクセスすることも できるんでしたね。
ここで扱う配列の性質も文字列のそれと、とても良く似ています。文字列は、 "文字(1 文字)" が列をなして並んでいるものですが、配列では、 "あるもの" が列をなして並んでいます。
ここで "あるもの" という表現を使いましたが、より適切には "変数" と いった方が正しいかもしれません。変数とは、 文字列を使おう でも見ましたが、"入れ物" です。この入れ物には、何でも入るわけではありません。 この入れ物に入れる事が出来るものは、その変数を宣言する時に指定した 型 に よって、指定されています。
たとえば、変数について、文字列型(string) の変数を宣言した場合、その変数には "文字列" しか 入れる事ができません。また、整数型(Integer)の変数を宣言した場合には、"整数" のみ代入することが出来ます。
procedure TForm1.Button1Click(Sender: TObject); var s: string; // 文字列型の変数 s を宣言 value: Integer; // 整数型の変数 value を宣言 begin s := 'Delphi'; // s には、文字列を代入する事が出来ます value := 100; // value には、整数を代入する事が出来ます value := 'Hello'; // エラー! value には、文字列を代入することは出来ません end;
上のプログラムをコンパイル(Ctrl+F9、又はメニュー欄から [ プロジェクト | コンパイル ] を選択)してみてください。以下のようなコンパイルエラーが表示されるはずです。
[エラー] "Integer" と "String" には互換性がありません
"互換性がありません" とは、つまり Integer(整数) 型の変数には、Integer 型の 値のみ代入でき、それ以外のものは代入できませんよ、ということを 意味しています。上記のプログラムでは、Integer 型の変数 value に String 型の値を 代入しようとしたので、コンパイルエラーが発生したというわけです。
配列とは、同じ型の変数が列をなして並べられたもの と考えてください。文字列は、1 文字 1 文字が、一つの列をなして並んでいると見なすことが出来ますよね。配列も同様に、(同じ型の)変数が一つの列をなしているのです。
配列の宣言
配列を宣言する場合には、その配列の名前と型、そして要素数(サイズ)が必要です。(※動的配列では、宣言時に要素数を指定しません。動的配列については後に出てきます)
例えば、要素数が 3 であり、型が Integer である配列(名前は IntArray)を宣言するには、次のようになります。
var IntArray: array[0..2] of Integer; // 配列 IntArray を宣言
これを擬似的に説明すると、以下のような感じになります。
var 配列の名前: array[添え字(開始)..添え字(末尾)] of 配列の型;
配列の要素数(つまり、サイズ)は、添え字で指定します。 つまり、添え字が 0 から 2 までの場合には、0, 1, 2 の添え字が利用できること になります。つまり、要素数(サイズ)は 3 となります。
配列の宣言が出来ましたので、次はこの配列に値を代入していきます。
procedure TForm1.Button1Click(Sender: TObject); var IntArray: array[0..2] of Integer; begin IntArray[0] := 100; // 添え字 0 番目に整数値 100 を代入 IntArray[1] := 200; IntArray[2] := 300; ShowMessage(IntToStr(IntArray[0])); // 100 と表示される ShowMessage(IntToStr(IntArray[1])); // 200 ShowMessage(IntToStr(IntArray[2])); // 300 end;
配列の個々の要素にアクセスするには、配列名[添え字] として、特定の要素に アクセスします。つまり、添え字を用いてアクセスするわけです。
今度は string 型の配列(要素数は 4) を作成してみます。
procedure TForm1.Button1Click(Sender: TObject); var StrArray: array[0..3] of string; begin StrArray[0] := '配列は'; StrArray[1] := '同じ型の'; StrArray[2] := '変数が'; StrArray[3] := 'グループ化したものである'; ShowMessage(StrArray[0]); // '配列は' ShowMessage(StrArray[1]); // '同じ型の' ShowMessage(StrArray[2]); // '変数が' ShowMessage(StrArray[3]); // 'グループ化したものである' end;
添え字について
これまでに出てきた配列のサンプルでは、添え字を 0 から使用しています。
これは、決まりごとではありません。つまり、要素数 3 の配列を
作成したい場合には、添え字を 3 から 5 までにするようなことも出来ます。
しかし、大抵の場合には添え字は 0 から始めるようにしてください。
配列とこれ以降に出てくる for 文を利用することで、配列の 先頭要素から末尾の要素までに一気にアクセスすることができます。
サンプル 1)
procedure TForm1.Button1Click(Sender: TObject); var StrArray: array[0..3] of string; i: Integer; begin StrArray[0] := '配列は'; StrArray[1] := '同じ型の'; StrArray[2] := '変数が'; StrArray[3] := 'グループ化したものである'; for i := Low(StrArray) to High(StrArray) do ShowMessage(StrArray[i]); end;
サンプル 2)
ボタン(Button) とリストボックス(ListBox) をフォームに貼り付けて 下さい。(Button, ListBox は共に Standard ページにあります)
procedure TForm1.Button1Click(Sender: TObject); var StrArray: array[0..1] of string; begin ListBox1.Clear; // リストボックスのアイテムをクリア // 配列の要素に値を代入 StrArray[0] := 'first'; StrArray[1] := 'second'; // リストボックスに配列に代入された値を表示する ListBox1.Items.Add(StrArray[0]); ListBox1.Items.Add(StrArray[1]); end; procedure TForm1.Button2Click(Sender: TObject); var IntArray: array[0..9] of Integer; i: Integer; begin ListBox1.Clear; for i := Low(IntArray) to High(IntArray) do IntArray[i] := 2 * i; for i := Low(IntArray) to High(IntArray) do ListBox1.Items.Add(IntToStr(IntArray[i])); end;