なぜ配列が必要か ~ プログラムが魔法でないとわかればプログラマになれる 21

配列は行列をイメージする

プログラムで使えるデータの中でも複雑なものに「配列」があります。配列は知っている人にとってはそれほど難しくありませんが最初は理解が難しいものです。どうして配列は難しいのでしょうか。データがどうなっているのかイメージしにくいことが一つの原因でしょう。

数値や文字列は具体的な内容そのものです。数値は 12 といった数そのものですし、文字列は abcアイウエオ といった文字そのものです。ですが配列は空間を指していますから具体的な内容をこれと言うことができません。正確には言えないこともありませんが、中に含まれるあれとこれとそれと…と言わなければなりません。

人気商品を買おうと朝早くからお店の前で列を作って並んでいる人は配列とよく似ています。自分自身が並んでいる状態ではなくヘリコプターに乗って上から眺めているようなイメージを持ってください。配列は最初空っぽです。お店の前にも最初誰も並んでいません。配列には一つずつ中身を追加できます。お店の列でも一人ずつ並ぶ人が増えていきます。配列は既に追加した中身を取り除くこともできます。お店の列でも時間がかかりすぎたりして離脱する人がいるでしょう。

配列のメリット

プログラムでは列のようなひとかたまりのデータを使いたいことが良くあります。例えば生徒100人のテストの点数というデータがあり平均点を出したいとしましょう。平均は全ての点数の合計を人数で割ると計算できます。合計点を計算するにはどうしたら良いでしょうか。「Aさん80点 + Bさん72点 + Cさん98点 + …」というように100人分足し算を羅列すればもちろん計算できます。100人くらいなら頑張れるかもしれませんが1万人いたらどうでしょうか。数式としても見れたものではありませんがプログラムでやっても大変なことになります。

let a = 80;
let b = 72;
let c = 98;

... 1万人分のデータを定義 ...

let sum = a + b + c + d + e + f + … 1万個の足し算

このプログラムには2つの問題があります。一つ目は1万個も名前を付けないといけないことです。二つ目に1万個の足し算の式を書かなければならないことです。 配列を使うと次のようになります。

let scores = [
    80,
    72,
    98,
    ... 1万人分のデータを定義 ...
];

let sum = 0;
let i = 0;

while (i < scores.length) {
    sum = sum + scores[i];
    i = i + 1;
}

1万人分の定義こそ同様に必要ですがそれぞれに名前を付けなくて済みます。配列に scores という名前を付ければ、あとは1つ目が80、2つ目が72、と列を定義していけば良いのです。

また、無数に続く + を使った計算式も書かなくて済みます。確かに + の計算式を並べるだけに比べるとプログラムが複雑になりましたが、それでもこうする重要なメリットがあります。それは定義したデータが1万個であっても1兆個であっても合計を計算するプログラムが変わらないことです。 1兆個にもなると + の計算式を書くことは事実上不可能です。それに比べてこのプログラムであれば1兆個でも数行のままです。

1兆個もあるなら scores の定義が1兆行あることになりどちらにしても無理ではないか、というのはもっともな指摘です。ですので1兆個もデータがある場合はプログラムの中でデータを定義せずにデータベースやデータ用のファイルなど別のものを使います。そうするとプログラムでデータを定義しなくて済みますからプログラムは数行のままでよくなります。

>>続きを読む
>>全記事を見る

<最新話にご興味があればフォローお願いします>

この記事が気に入ったらサポートをしてみませんか?