Dictionaryについて

##はじめに

この記事は、[[RPA] UiPath Friends 公式 Advent Calendar 2020](https://qiita.com/advent-calendar/2020/uipathfriends)の５日目の投稿です。
よく便利だよなーと使用しているDictionaryについて書いてみました。

【使用環境】：Studio 2020.10.2 Community License
#Dictionaryについて
下記画像の様にArrayなどの配列はindex(連番の数字)で管理されており、Dictionaryはkeyに設定したデータで管理されています。
DictionaryはKeyとvalueの型を別々に設定できる(Key：string、value：int32など)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/482005/03efdc0b-35f0-3d5d-a66c-56c1b75a3a37.png)

設定済のDictionaryから一つのデータだけ取得したいという場合
**Dictionary変数("<font color=Red>Key</Font>")**
というようにkeyを指定して取得したいデータを参照します。

では画像のDictionaryから名古屋支店の住所を取得してみましょう！
今回は1行に書き込みアクティビティに記載して実行してみました。
**Dictionary変数("<font color=Red>名古屋支店</Font>")**と支店名をkeyに指定します。
※dicAdressというのがDictionary変数
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/482005/2f81d53f-05d8-9f61-56e7-c256aea9d292.png)
【実行結果】
指定した名古屋支店の住所が出力されています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/482005/0ebe535d-1e00-627a-1545-6e0edca65780.png)
今回は直接指定しましたが実際使用する場合はKeyの指定は変数で指定することが多いと思います、変数で記載した場合は下記画像の様になります。
※strBranchが支店名が格納されている変数
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/482005/64d5e700-eb0e-34b0-32b3-f4fc63bcf37a.png)

配列だとIndexの数字で指定するので今回の様に名古屋支店の住所を取得したい時に何番目に格納されているか覚えている必要がありますがDictionaryだと支店名をkeyに設定しているため取得したい支店名を指定すればいいのでどこに格納されているんだっけ？？という事がなくなります。

今回は一つだけ取得の例を出しましたが全部取得したい！追加方法や初期設定はどうやるの？
という他の使用方法は下記リンク先を参照ください。
<B>[◆Dictionaryの使い方](https://qiita.com/emuxwasabi/private/4234ce02b62f599d445e)</B>

##こういう時に使ってるよの一例
<B>◆設定情報</B>
設定情報をDictionaryに格納して使用するはよく使うので共通部品で作成して使用しています。
設定については上に貼ったリンク先のやり方と流れは同じ＋後程共通部品をUPする為フローは省略いたします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/482005/33322c28-b5fb-a513-d733-1aaa4d55e99d.png)
上記は掲載サンプル様に作成した設定情報シートの為数行しかありませんが
実際使用しているデータはもっと何行も情報記載されています。
取得した設定情報を使用して必要な情報をDictionaryを使用して記載
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/482005/33ffcd71-b99e-498b-0791-0d5c87d570de.png)
・OUTPUTフォルダのパスが変更になった
・ファイル名を変更したいetc…
など軽微なものだけ記載しましたが設定情報だけ修正すれば良いので保守がしやすいのはメリットだと思います。

<B>◆申請書など転記箇所がいろんなセルに・・・・！</B>
サンプル画像のようなExcelの請求書や申請書等テンプレートへの転記処理時に使用
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/482005/bed37147-72cb-6cbb-f895-d11e3f14f534.png)
請求書シートへデータ転記の例
・データテーブル(dtInvoice)に転記するデータが格納されている
・Dictionary(dicAdditionalCell)に下記で格納されている
　　　key:「dtInvoice」のカラム名
　　　value:転記するセル番地
サンプル画像ではdtInvoiceテーブルから転記データを取得し、dicAdditionalCellに格納されている請求書シートのセル番地(<font color=Red><b>item.Value</font></b>)にデータ(<b>row(<font color=Red>item.Key</font>).ToString</b>)を転記している。
※あくまで転記処理のみのサンプルなので実際は転記後のテンプレートの出力処理などが入る
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/482005/e3c9417c-f73d-4d4e-4390-6bf933aa5c30.png)

<B>◆横に長い表のデータ加工時</B>
サンプル画像はある月の勤怠表作成用のINPUTデータです。
勤怠データなどはカラムも多いため横に長いデータ表になっています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/482005/2c61b697-c18a-80e4-c951-834893b559a1.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/482005/547b510b-2ae2-dbed-abd1-39aefa326530.png)
出力用の勤怠データ表に必要なデータだけ転記、複数項目の合算して転記などの処理を
一つひとつAssignで処理すると後々保守が大変・・・・・
なのでDictionaryに下記の様に格納して処理を行います。
　Key：OUTPUT用のカラム名
　value：INPUTデータのカラム名
Defaultに出力用データテーブルへの格納処理、別処理が必要な場合は有給回数の様にSwitch等で処理分岐や加工が必要ないデータだけDictionaryに格納処理させて合算処理は別でなど。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/482005/035e786b-6332-1515-9ae1-87d91577e2fd.png)

一例を上げましたが他にもKeyをstring、valueをdatatable型に設定して
Keyを検索用ID、valueをデータスクレイピングで取得したdatatableに・・・・など
Keyとvalueの型を任意で変更することで色んなことに活用出来るので色々試してみてください。
最後までお読みいただき、ありがとうございました。