【FlowScript講座】第7回 ArrayList


[管理者]
KHCmaster
今回はArrayListについて勉強します。

ArrayListはその名のとおりArray(配列)あるいはList(一覧)を扱うためのクラスです。

ArrayListの型を扱うためには、例によってArrayList.Valueを使います。
ところが、ArrayList.ValueにはValueプロパティだけでなく、Inメソッドが用意されています。
ArrayList.ValueではInメソッドを使用するとArrayListの型のデータが作成されます。
それ以降、Valueプロパティを使用してArrayListのデータを扱うことができます。
Inメソッドを使用せずにValueプロパティにアクセスするとNullという不正なデータを扱うことになり、
期待した動作が行われないので注意してください。


このクラスを使用する場合というのは、同じようなデータに対して同じような処理を行うときになります。

たとえば、1~10までの数のそれぞれの2乗の数字を出力した後に、1~10までの数のぞれぞれの3乗を出力したいというシーンを考えます。
このとき、Console.WriteLineを何個も書きたくないので、前回習ったRepeatを使い簡潔に書くようにします。

その際、出力したいデータがあらかじめArrayListに入っていると楽になります。
また、ArrayListの要素一つ一つに対して反復操作を行う場合には、Repeat.Foreachを使用します。

まず、Logic.Sequentialを使い、最初にArrayListのデータを作成しておきます。
次に、Repeat.Forを使い、1~10までのInt32の型のデータをArrayListに追加します。
ArrayListに要素を追加するには、ArrayList.Addを使用します。
ArrayListプロパティには追加したい対象のArrayList、Valueプロパティには追加するデータを指定します。
データは末尾に追加されます。
ArrayListにデータの追加が終われば、次は出力するノードの作成です。
Repeat.ForeachではArrayListプロパティに反復処理を行いたいArrayListを入力します。
今回は10個のInt32のデータがあるので、10回の反復が発生します。
発生した反復はLoopイベントを通して行われます。また、そのときのデータはValueプロパティから取得できます。
なお、Iterプロパティではそのときのインデックスを取得できます。(n回目の反復ではn-1)
何とかの何乗などはMath.Powを使えば簡単にできます。
AのB乗をValueに返します。
以下が作成したスクリプトです。(Foreach.fsml)

ArrayListにデータを追加する段階ではすごく見にくいですが、Repeat.Foreachを使う段階では反復用変数のインクリメント(数を増やすこと)
などの処理を行わずに済むのであっさり書くことができている点に注目してください。

ArrayListのデータを作成する方法ですが、実はもう一つあります。
ArrayList.FromElementを使用する方法です。
ArrayList.FromElementを使用すると、評価時にArrayListが作成されて、A~Fプロパティのデータを順番に加えたものをValueプロパティに返します。
IsExpandedプロパティをTrueにすると追加する要素がArrayListの場合に、内部の要素を展開してから追加するようになります。
先ほどと同様の処理をするスクリプトをArrayList.FromElementで書いたものが以下のスクリプトです。(Foreach2.fsml)

2個目のArrayList.FromElementのValueをRepeat.ForeachのArrayListプロパティに繋いでいない点に注意してください。
仮につないでしまうと、Repeat.ForeachのArrayListプロパティの評価時にArrayListを新規に作成することになるので、不要なパフォーマンスの低下を招きます。
Scopeに一度保存しておくと作成は1回で済むので、パフォーマンスの向上につながります。


ここまでは、ArrayListのデータの作成方法、および反復方法でしたが、他にも、削除、検索、途中に追加など様々な操作方法があるので
勉強がてらに使ってみるのもいいでしょう。

今回のまとめですが

ArrayList.ValueでArrayListのデータを作成
ArrayList.FromElementでもデータを作成できるが、評価毎に作成されるので複数回使用される場合にはスコープに保存する
・要素を末尾に追加するにはArrayList.Addを使用する
・ArrayListの各要素に対して反復を行うには、Repeat.Foreachを使用する
Math.Powでべき乗を計算できる

となっています。
今回の講座に関する質問はこのスレッドで受け付けています。
次回はStringについて行う予定です。
作成日時:2013-07-15 00:46:16 更新日時:2013-07-15 00:47:10
FlowScript講座をフォーラムを使って開講中です。