3秒でわかる
複数の値を順番に並べ、位置を表す番号で取り出せるようにしたデータ構造。同じ扱いのデータをまとめて処理するときの基本になります。
30秒図解
もう少し詳しく
どういうものか
配列は、複数の値を一列に並べ、先頭からの位置を表す番号 (添字) で取り出せるようにしたデータ構造になる。多くの言語で添字は 0 から始まり、scores[0] が 1 番目の要素を指す。メモリ上では要素が連続して置かれるため、何番目であっても同じ速さで読める。Python のリスト、JavaScript の配列、Java の配列がこれにあたる。
なぜ必要か
生徒 40 人の点数を score1 から score40 まで別々の変数で持つと、平均を出すだけで 40 行の足し算になり、人数が変わるたびに書き直す必要が出る。配列にまとめれば、要素数がいくつでも同じループで処理できる。データの個数が実行するまで決まらない場面でも、同じコードのまま扱える点が大きい。
具体例
scores = [80, 95, 62, 78]
print(scores[0]) # 80 最初の要素
print(scores[-1]) # 78 最後の要素
print(len(scores)) # 4 要素数
total = 0
for s in scores:
total += s
print(total / len(scores)) # 78.75並びは次のように、番号と値が対になっている。
添字 0 1 2 3
値 80 95 62 78つまずきやすいところ
添字が 0 始まりである点を忘れると、要素数と最後の添字が 1 ずれる。要素が 4 つある配列の最後は scores[4] ではなく scores[3] になり、scores[4] は範囲外のエラーになる。もう一つ、b = a と書いても中身は複製されず、同じ配列を二つの名前で指すだけになる言語が多い。b を書き換えたつもりが a も変わる、という不具合はここから生まれる。複製したいときは Python なら a.copy() を使う。
似た用語との違い
| 用語 | 取り出し方 | 特徴 |
|---|---|---|
| 配列 | 番号で取る | 位置での参照が速い |
| 連結リスト | 先頭からたどる | 途中への挿入が速い |
| 辞書 (マップ) | キーで取る | 名前で引きたいときに使う |
覚え方
配列はロッカーの列にあたる。番号さえ分かればどの扉も同じ手間で開けられるが、途中に新しいロッカーを差し込むには後ろ全部をずらす必要がある。取り出しが速く、途中への挿入が重い理由がここにある。
要素が固定長かどうかも言語で分かれる。Java の配列は宣言時に長さが決まり、後から増やせない。Python のリストや JavaScript の配列は自動で伸びるが、内部では領域を確保し直しており、無料の操作ではない。