鈴鹿の住処

■UiPath Tips■

更新日:  作成日:

コレクション について

■はじめに

UiPath Studio でのコレクション(List)について紹介します。

コレクションは同じデータ型の複数のデータを1つの変数に入れることができます。
要素数を気にせずに、簡単に要素を追加・削除することができますので、格納する数が可変する場合に適しています。
インデックスは「0」から始まります。

要素を追加したり、要素を削除する操作はアクティビティと.NETの構文で行うことができます。
また、コレクション型の変数は、事前に初期化を行う必要があります。

Excelのように列と行による表形式のデータはデータテーブル型になります。

データテーブル については「データテーブル の基礎」をご覧ください。

■コレクションの初期化

コレクション型の変数は、事前に初期化を行う必要があります。
初期化していない状態でコレクションを操作するアクティビティを実行すると、下記画像のようにエラーになります。

初期化エラーの画像

初期化は変数の既定値・代入アクティビティで行うことができます。
中身が空の状態での初期化は下記のように設定します。

new List(of 値のデータ型)

数値型のコレクションなら、 new List(of Int32) となります。

中身を入れた状態での初期化は既定値や代入で、下記のように設定します。

new List(of 値のデータ型) From {格納する要素をカンマ区切り}

文字列型のコレクションなら、 new List(of String) From {"1","2","3","4"} となります。

また、変数の型のプルダウンにコレクション型が無い場合は、[型の参照(Browse for Types)] > [.NET型を参照して選択] ウィンドウでSystem.Collections.Generic.List<T>で検索して、設定することができます。
また、コレクション型に入れることができるデータは一種類のデータ型のみになり、プルダウンで入れるデータ型を設定します。

コレクションの型設定の画像 .NET型を参照して選択の画像

■コレクションの操作

UiPath には、コレクション型の変数を操作するアクティビティが用意されており、VB.NETの構文でも操作ができます。

・コレクションに追加(System.Activities.Statements.AddToCollection)

【プロパティ】

TypeArgument(必須)・・・操作するコレクションに格納する要素と同じデータ型を設定します。
コレクション(必須)・・・操作するコレクション型の変数を記入します。
項目(必須)・・・追加する要素を記入します。

コレクションに追加プロパティの画像

【動作】

「コレクション」に記入したコレクション型の変数に、「項目」に記入した要素が追加されます。
要素が追加される位置は一番後ろになり、最大要素数は自動的に増えます

コレクションに追加動作の画像
・コレクションから削除(System.Activities.Statements.RemoveFromCollection)

【プロパティ】

TypeArgument(必須)・・・操作するコレクションに格納する要素と同じデータ型を設定します。
コレクション(必須)・・・操作するコレクション型の変数を記入します。
結果(任意)・・・Boolean型の変数を設定できます。コレクション内に項目が有ればTrue、無ければFalseが出力されます。
項目(必須)・・・削除する要素を記入します。要素のインデックスではなく、要素の値を入力します。

コレクションから削除プロパティの画像

【動作】

「コレクション」に記入したコレクション型の変数から、「項目」に記入した要素が削除されます。完全一致の要素が対象になります。
削除対象が複数ある場合には、削除されるのは最初の1つのみになります。削除された要素の値が空白になるのではなく、要素自体が無くなり、最大要素数が自動的に減ります。
下記画像では、「"abc","b","c","b","b2"」から1つ目の「"b"」が削除されて、「"abc","c","b","b2"」となります。

コレクションから削除動作の画像
・コレクションを消去(System.Activities.Statements.ClearCollection)

【プロパティ】

TypeArgument(必須)・・・操作するコレクションに格納する要素と同じデータ型を設定します。
コレクション(必須)・・・操作するコレクション型の変数を記入します。

コレクションを消去プロパティの画像

【動作】

「コレクション」に記入したコレクション型の変数を 中身を空の状態にクリアします。
要素の値が空白になるのではなく、最大要素数が「0」になります。

コレクションを消去動作の画像
・コレクション内での有無(System.Activities.Statements.ExistsInCollection)

【プロパティ】

TypeArgument(必須)・・・操作するコレクションに格納する要素と同じデータ型を設定します。
コレクション(必須)・・・操作するコレクション型の変数を記入します。
結果(任意)・・・Boolean型の変数を設定できます。コレクション内に項目が有ればTrue、無ければFalseが出力されます。
項目(必須)・・・有無を確認する要素を記入します。要素のインデックスではなく、要素の値を入力します。

コレクション内での有無プロパティの画像

【動作】

「コレクション」に記入したコレクション型の変数から、「項目」に記入した要素が有れば、「結果」に設定した変数に True と出力されます。
無ければ「結果」に設定した変数に False と出力されます。完全一致の要素が対象になります。

下記画像では、「"abc","b","c","b","b2"」内に「"a"」が無いので、変数:resultFalse が出力されます。

コレクション内での有無動作の画像
・要素の位置を取得(List<T>.IndexOf メソッド)

返ってくる値は数値型のインデックス(インデックスは「0」から始まります)になります。

コレクション内に検索する要素の値がない場合には、「-1」と出力されます。

検索元のコレクション型変数.IndexOf(検索する要素の値 [,検索開始位置])

list = {"abc","b","c","b","b2"} 検索元のコレクション型変数

list.IndexOf("c") 出力結果:2(数値型)

list.IndexOf("e") 出力結果:-1

検索対象が複数ある場合には、一番最初のインデックスの値が返ってきます。一番後ろのインデックスの値を取得するには、LastIndexOf メソッドを使用します。
任意で検索開始位置をインデックスで指定すれば、検索開始位置を含むインデックスから後ろの一番最初のインデックスの値が返ってきます。

list = {"abc","b","c","b","b2"} 検索元のコレクション型変数

list.IndexOf("b",1) 出力結果:1
list.IndexOf("b",2) 出力結果:3
list.IndexOf("b",list.IndexOf("b") + 1) 出力結果:3 二番目の"b"のインデックスを求める
list.LastIndexOf("b") 出力結果:3 一番後ろの"b"のインデックスを求める

・格納されている要素数を取得(List<T>.Count プロパティ)

返ってくる値は数値型の要素の数(1個格納されていれば、「1」)になります。

取得元のコレクション型変数.Count

list = {"abc","b","c","b","b2"} 取得元のコレクション型変数

list.Count 出力結果:5(数値型)

・並び替え(Sort メソッド)

メソッドを呼び出し」アクティビティを使用します。順序を反転させるには、Reverse メソッドを使用します。

【プロパティ】

TargetObject(必須)・・・操作するコレクション型の変数を記入します。
MethodName(必須)・・・実行するメソッドを記入します。

並び替え・反転の画像

list = {"abc","b","c","b","b2"} 並べ替え・反転前

list = {"abc","b","b","b2","c"} 並べ替え後 Sortメソッド

list = {"b2","b","c","b","abc"} 反転後 Reverseメソッド

・指定した位置に要素を挿入(Insert メソッド)

メソッドを呼び出し」アクティビティを使用します。指定した位置の要素を削除には、RemoveAt メソッドを使用します。

【プロパティ】

TargetObject(必須)・・・操作するコレクション型の変数を記入します。
MethodName(必須)・・・実行するメソッドを記入します。
パラメーター(必須)・・・追加する位置追加する要素を記入します。プロパティ欄の[...]をクリックすると、パラメーター画面が開きます。

追加するコレクション型変数.Insert(追加する位置 ,追加する要素)
パラメーター画面⇒上段の第1引数:追加する位置、下段の第2引数:追加する要素
削除するコレクション型変数.RemoveAt(削除する位置)
パラメーター画面⇒上段の第1引数:削除する位置

挿入・抜き出し画面の画像 インサートのパラメーター画面の画像

list = {"abc","b","c","b","b2"} 追加・削除前

list.Insert(1 ,"d")
list = {"abc","d","b","c","b","b2"} 追加後

list.RemoveAt(3)
list = {"abc","b","c","b2"} 削除後

■コレクションからデータを取り出す

コレクション型変数に格納した値を取り出すには、「繰り返し(コレクションの各要素)」アクティビティを使用するか、取り出す位置をインデックスで指定、VB.NETの構文を使用します。

・繰り返し(コレクションの各要素) (UiPath.Core.Activities.ForEach)

インデックス「0」から順次、コレクション型変数の中身を取り出すことができます。取り出された値は「item」内に格納されます。

【プロパティ】

TypeArgument(必須)・・・操作するコレクションに格納する要素と同じデータ型を設定します。
項目のリスト(必須)・・・操作するコレクション型の変数を記入します。
現在のインデックス(任意)・・・繰り返している最中の現在のインデックスを変数に出力できます。データ型は数値型です。出力されるインデックスは「0」から始まります。

list = {"a","b","c"} コレクションの中身

繰り返し(コレクションの各要素)プロパティの画像 繰り返し(コレクションの各要素)の実行画像

・繰り返しをコンティニュー(UiPath.Core.Activities.Continue)
繰り返し処理をスキップして、次の繰り返し処理実行に進みます。
下記画像では、繰り返し中の現在のインデックスが奇数の場合はスキップして、次の繰り返し処理実行に進んでいます。

list = {"a","b","c","d","e"} コレクションの中身

繰り返しのコンティニューの画像

・繰り返しをブレーク(UiPath.Core.Activities.Break)
繰り返し処理を終了します。
下記画像では、繰り返し中の現在のインデックスが「2」を超えた場合に、繰り返し処理を終了します。

list = {"a","b","c","d","e"} コレクションの中身

繰り返しをブレークの画像
・インデックスで指定

特定の位置にある値を取得できます。

コレクション型変数(インデックス)

list = {"a","b","c","d","e"} コレクションの中身
list(2) 出力結果:"c"

・メソッドで取得

一番前と一番後ろの値は、MinメソッドとMaxメソッドで取得することができます。

コレクション型変数.Min
コレクション型変数.Max

list = {"a","b","c","d","e"} コレクションの中身

list.Min 出力結果:"a"
list.Max 出力結果:"e"