コンテンツにスキップ

配列

概要

配列は、変数の集まりのようなもの。

ただの変数だと

_a = 1
_b = 2
_c = 3
_d = 4
_e = 5

_sum = _a + _b + _c + _d + _e

となるが、配列だと

_a = (1,2,3,4,5)

_sum = _a[0] + _a[1] + _a[2] + _a[3] + _a[4]

と書ける。インデックスは 0 から始まるので、最後が 4 になることに注意。

配列は繰り返しと組み合わせることで、真の威力を発揮する。先ほどのように _a[0], _a[1], _a[2], … と書かずに、次のようにも書ける。

_a = (1,2,3,4,5)

_sum = 0
for _i = 0 ; _i < 5 ; _i++
{
  _sum += _a[_i]
}

_a[0], _a[1], _a[2], … の代わりに、変数 _i を使っても _a のそれぞれの値を取得できる。_i の中身は for の中で、5 未満の間、1 ずつ足されていくので、順に _a[0], _a[1], _a[2], … と見ていくことになる。

ARRAYSIZE による動的サイズ取得

上の例だと、あらかじめ配列の大きさが 5 であることがわかっていないと書けない。次のようにすると、配列の大きさに関係なく書ける。

_a = (1,2,3,4,5)

_sum = 0
for _i = 0 ; _i < ARRAYSIZE(_a) ; _i++
{
  _sum += _a[_i]
}

ARRAYSIZE は _a の配列の大きさを判定して 5 を返す。_a が配列であれば、大きさがいくつでもかまわない。

配列には文字も入る。

_sweets = ("プリン", "チョコレート", "クレープ", "甘口いちごスパ")
_talk = ""
for _i = 0 ; _i < ARRAYSIZE(_sweets) ; _i++
{
  _talk += _sweets[_i] + "に"
}
"\1\s[10]\0\s[0]" + _talk + "・・・今日は全部食べちゃうよ!\1なんかまざっとる!\e"

foreach ループ(最も簡単な方法)

foreach を使うと、_i = 0 も ARRAYSIZE も _i++ もいらない。かわりに、_a[_i] に当たるもの(ここでは _var)を書けばよい。

_a = (1,2,3,4,5)

_sum = 0
foreach _a ; _var
{
  _sum += _var
}

_var には _a の中身が順に入ってくる。配列の最後までいくと、自動的に終わる。

関連