LoginSignup
12
11

More than 5 years have passed since last update.

Tupleを使って効率的にDictionary等を使う

Last updated at Posted at 2018-12-11

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<」まで入力すると、以下のような画面になります。

image.png

ここで必要な値の数を設定します。
たとえば、Int32型・String型・Int32型と3つ格納するなら、

Tuple<T1,T2,T3>

を選択すれば良いです。
その上で型の設定すれば完了です。

image.png

もちろん、Dictionaryの値に設定することもできます(むしろキー値にすることもできますが、そういう使い方は、流石にあまりしないと思います)
image.png

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つの変数として扱う部分に「複数の値を、個々の型を指定して持てる」方法がある、ということだけ、頭の片隅にいれておくと何かのときに役に立つかもしれません!

12
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
11