【第32回】ロータス博士のWinActor塾~変数と配列Ⅱ
配列とは
いよいよ配列がどんなものか解説していくぞ。
丁寧に説明するのでしっかり覚えよう。
前回の記事を読んでいない方はこちらから
配列とは、データを一列に並べたもののことを指します。
変数と同じように、作成することでデータを格納することができます。
例えば「a」という名前の変数があるとします。前回の説明を思い出してみましょう。
変数は箱のようなものなので、イメージとしてはこのようになります。
変数には必ず名前を付ける必要があります。
同じような箱が複数あった場合に、任意の箱を指定できなくなってしまうためです。
配列もデータを格納できる箱というイメージですが、変数と異なるところは複数のデータが一列に並んでいる点です。
もちろん配列にも名前が必要です。「a」という配列を想像してみましょう。
配列「a」は次のようなイメージになります。
箱が繋がっているように見えますね。
もしくは「a」という箱が5つの部屋に分かれたというイメージでしょうか。これが配列の正体です。
重要なのは、データを格納できる部屋が複数あり、それが連続して繋がっているもの、ということです。
これら全体を「a」と呼びます。
イメージはわかりました。
でもデータが5つ入れられるなら、5つぶん名前を付けないと取り出せなくなるのでは?
良いところに気が付いたのう。
ここからが配列の面白いところなのじゃ。
配列には、それぞれの部屋に番号が振られます。
この部屋ひとつひとつを配列の要素と呼びます。
さきほどの「a」という配列の場合は次のようになります。
各要素に連続した数字が割り振られています。
この0~4の数字を添字(そえじ)もしくはindex(インデックス)と呼びます。
配列の要素の合計をその配列の要素数と呼びます。この例では要素数は5になります。
添字は0から始まるので、要素数をNとすると、添字の最後はN-1となることに注意しましょう。
ここまでをまとめると次のようになります。
要素数はいくつでも増やすことができます。
aという配列の2番目のデータが欲しい場合、a[1]のデータになるので、配列名の「a」とインデックス「1」を指定します。
配列にデータを格納・更新したり、配列からデータを取得する場合は、必ずインデックスが必要になることを覚えておきましょう。
ループとの組み合わせ
ここまでの説明で配列がどんなものがわかったかな?
聞きなれない言葉が多かったかもしれんが、イメージは伝わったと思う。
だいたいわかりました!
でも要素数5の配列に5つのデータを入れるなら
変数を5つ作っても同じじゃないでしょうか。
そうくると思ったぞ!
なぜ配列が重宝されるのか、それはループとの相性が非常に良いからなのじゃ。
ではループと配列の組み合わせについて学んでいこう。
ループとカウンタの有用性
まずはループとカウンタについて簡単におさらいしましょう。
ループは、指定した回数、もしくは無限に処理を繰り返すフローのことでした。
そして、繰り返しの中で加算していく数値をカウンタと呼びます。
ループと条件分岐については過去の記事をご参照ください
2020年5月22日
WinActorのシナリオで使用する条件分岐ノードと
繰り返し(ループ)ノードの使い方について例を用いて詳しく説明しています
例えば、1から10という数値を表示したい場合は
次のようなフローになるぞ。
「i」という変数を準備し、ループに入る前に0にします。
そして、ループする毎にiを+1することで、1ループ目には1、2ループ目には2を表示することができます。
表示した後は、条件分岐でiが10より少ない場合にループすることで
10まで表示したらループから抜けるようになります。
ポイントは「iを+1する」という部分。
何ループ目でもやることが同じだからこのようなことができるのじゃが
一番重要なのは、iが数字であることじゃ。
数字じゃないとなにかまずいんですか?
うむ。次の例を考えてみてくれ。
月曜~金曜を表示するフローを考えてみましょう。
1~10はループを利用することで簡単にフローを作成することができましたが
月~金をループで表示しようとした場合はどのようなことが起きるでしょうか。
1→2と変化する場合は1を加算、同様に2→3と変化する場合も1を加算するので、先ほどの例はうまくいきました。
しかし、今回は月~金なので、1を加算しても意味がありません。
月→火とするにはどうすればよいのでしょうか。
数字じゃないだけでこんなことに・・・
月だったら火みたいな条件分岐をたくさん入れればなんとか・・・うーん
どうじゃ、難しいじゃろう。
これをループでどうにかしたい場合でも配列なら解決できるのじゃ。
インデックスとカウンタ
それでは、配列を利用してこの問題を解決しましょう。
配列の使い方さえわかっていれば、難しいことではありません。
次のようなデータが入った配列を考えてみてください。
それぞれの要素に月~金というデータが入った「曜日」という名前の配列を作成しました。
最初に表示したいのは「月」なので、曜日の1番目のデータが必要です。
配列のルールに従うと、月は曜日[0]と指定できます。さらに、火は曜日[1]となります。
これを改めて図にすると次のようになります。
インデックスに注目してください。
配列のインデックスは0から始まり、順番に割り振られるものでした。
月~金は順番に配列に格納されているので、月→火とするにはインデックスを1加算すればよいということになります。
ループカウンタをインデックスに指定して取得することで、月~金を順番に表示することができるのです。
i をループカウンタとすると
曜日[i]
と表すことができます。
こんなやり方があったなんて・・・
配列ってすごいんですね!
うむ、配列はたくさんの可能性を秘めておる!
ループにできずに複雑化してしまっているシナリオも、これできれいになるかもしれんぞ。
最後にフローを確認して今回はおしまいじゃ。
「i」という変数を準備し、ループに入る前に0にします。
インデックスは0から始まるので、まず曜日という配列を表示します。
インデックスの最後は要素数-1となるため、インデックスが4で表示を終えたらループを抜ける必要があります。
従って、ループに戻る条件はi<4となります。
これで配列がループと相性抜群で、連続したデータを扱うことに長けているものだと
理解してもらえたと思う。
次回は、実際にこのシナリオをWinActor上で作成してみるぞ!
できることが広がった気がします!
次回が楽しみですね!
関連記事こちらの記事も合わせてどうぞ。
2024.11.05
【第105回】ロータス博士のWinActor塾~新しい画像マッチング画面
2024.09.27
【第104回】ロータス博士のWinActor塾~ガイド利用シナリオ(作成編)
2024.09.10