#UiPathのDictionaryあるある
UiPathを使っていて、ExcelからDataTableに値を取得するようなケースはかなり多いです。
ですが、UiPath上で使う時にDataTableの不便なところは、各カラムのデータ型を事前に定義できないことにあります。(※実際には定義できなくはないですが、UiPathのGUI上で適用されないので意味がないです)
なので、各カラムの値は基本的にObject型として扱われます。Int32やStringなど、一般的な形式として使用するには、明示的に変換して使うことが必要になります。
(たとえば 変数名.ToString() でString型に変換してり、 Int32.Parse(変数名.ToString()) でInt32型に変換したりですね)
そこで、比較的よく使う(と思われる?)手として、Dictionary型というデータ型に値を格納します。
細かい解説は省きますが、Dictionaryは「キー」と「値」のコピーになります。DataTableと違って、キーおよび値にデータ型を設定することができます。たとえば「キーはString型、値はInt32型」のような感じですね。(厳密に言えば、これはDictionaryではなくGenericという仕様のおかげですが)
Dictionaryはかなり便利なのですが、何しろその性質上、キーに対して1つしか値が記憶できません。
配列を設定すれば値を複数格納できますが、型は1つしか設定できません。Object型の配列では前述のDataTableの使いにくさと同じ問題がついてまわりますし。
そこでTupleを使ってみます
Tupleとは、1つの変数として振る舞いますが、中に子要素(あるいは値)を複数持てます。配列と違って、個々の要素はそれぞれ型を設定できます。
プログラミングの経験がある方なら、構造体に近いもの、というとイメージしやすいと思います。ただし、構造体との違いは、個々の要素には名前がなく、順番に「Item1」「Item2」……とつきます。
##Tuple型の設定方法
まず、具体的なTupleの設定方法です。
変数の型設定を「Tuple<」まで入力すると、以下のような画面になります。
ここで必要な値の数を設定します。
たとえば、Int32型・String型・Int32型と3つ格納するなら、
Tuple<T1,T2,T3>
を選択すれば良いです。
その上で型の設定すれば完了です。
もちろん、Dictionaryの値に設定することもできます(むしろキー値にすることもできますが、そういう使い方は、流石にあまりしないと思います)
##Tuple型の使い方
値として設定するには、
Tuple.Create(Of Int32, String, Int32)(100, "Value", 200)
のように、Tuple.Create(Of 型名, 型名, ……)(値1, 値2, 値3) として設定します。
値を取得・一部だけ変更する場合は、
Tuple型変数.Item1
Tuple型変数.Item2
Tuple型変数.Item3
のように、設定した順番に応じた「Item●」とアクセスすれば良いのです。
(UiPath Studioの開発画面でも、ちゃんとItemごとに型が設定されます)
#ちょっと駆け足でしたが
ざっくりと「UiPathで構造体のようなものも使える」というのがこの記事の主旨です。
なので「構造体」という概念にあまり馴染みがないと使いにくいかもしれませんが、Dictionaryや引数など、通常は1つの変数として扱う部分に「複数の値を、個々の型を指定して持てる」方法がある、ということだけ、頭の片隅にいれておくと何かのときに役に立つかもしれません!