
「配列」という入れ物は中が”間仕切り”になっている- しりとりに使える言葉のリストを入れておくのはこのデータ型だ!
第1章では、画像認識した結果が複数存在して、それをまとめて入れておくのに「配列」を使いました。
ここで再度、「配列」とは何かをおさらいしてみます。
英語で言えば”単数”と”複数”の違い
例えば文字を入れる「変数」、nameを作った場合、そこには文字列は一つしか入りません。入れ物としてはこんな単純な感じです。
ところが、入れ物の中に同じ種類のものを何個も入れないといけないケースがあります。入れ物のイメージはこんな感じ。
この間仕切りによって、一つの変数の入れ物であっても文字列が何個も入れることができます。これが「配列」という仕組みです。まずは次の概念図をご覧ください。
要は、変数は”単数形”、配列は”複数形”だと覚えておいても構いません。
配列は0からスタートして数える
複数形の変数を使う場合はいろいろとあります。例えば都市の名前を入れておきたい時は、
let cities = ["札幌", "函館", "青森", "仙台" .... ];
このように配列にデータを入れる場合は括弧([と ])の中に値を書いていきます。
これが一つの都市の名前、例えば”札幌”だけを入れたいなら「単数形の変数」で構いません。
let city = "札幌";
そして、配列の中から値を取り出して使いたい場合、それぞれの番号を指定してやります。例えば最初の「札幌」を取り出す場合は次のように書きます。
let city = cities[0];
これはcitiesという配列の0番、つまり最初の値を指します。それが「札幌」です。このように配列の中の要素に付けられた番号は0からスタートしますので注意してください。
ではちょっとした問題です。次のコードでnextMove(次の動き)に入る文字はどれになりますか?
let directions = ["right", "left", "up", "down"];
let nextMove = directions[3];
3番目なのでup?と思った方は間違い。配列の数字は「3番目」という意味ではなく、「3番」ということ。ここでは4つの方向が入っているので、つけられた番号は0,1、2、3です。つまり3という番号を持つのは最後のdownです。
let directions = ["right", "left", "up", "down"];
let nextMove = directions[directions.length - 1];
あれ? 番号がありませんよ。その代わり、directions.length - 1 とあります。読めばその意味は想像できますよね。directions.lengthはdirections配列の」長さ = length」です。つまり配列にいくつ入っているか。そうです4です。そこから1引くのでここの数字は3です。こうやって配列の番号を計算して書くこともできます。3番ということなので、ここもdownが取り出さて、それがnextMove変数に入ることになります。。
このように配列は「0から始まる配列番号(インデクス)」を使って値を取り出します。この操作はこれからも頻繁に使いますので是非理解しておいてください。