ちょうど前回投稿したSharePointサイトのメンバー一覧のところで、複数の配列を一個にまとめあげる操作が出てきました。
このようなシチュエーションって結構あるんですが、Power Automate上での実装としてはいくつかパターンがありますね。
ということで、力業込みの複数パターンを整理しようと思います。
題材として、複数の作者名を含んだ配列をもとに、Google Books APIで書籍を取得して、作者とタイトルを一個の一覧にまとめていくような操作を考えます。
パターン1 : 力業
Nが有限で1,2個であれば、愚直に一個ずつ処理するという方法があります。
ここでは3人の作者の書籍を取得することを想定しているので、3つのHTTPアクション (Google Books API用) と Selectアクション (タイトルを抽出する用) が入っています。
最後に一個にまとめ上げる操作では、union()
関数を使って、union(1個目の書籍一覧, 2個目の書籍一覧, 3個目の書籍一覧)
のように異なる3つの配列を統合しています。
これでもいいですね。Nが少なければ非常にストレートでわかりやすいです。
パターン2 : 2重ループでせっせと追加
Nが多くなってくると、それぞれを独立させるのはちょっと厳しくなってきます。そこでApply to eachのループ処理を使おう!となるわけですが、1個の一覧にまとめるのどうやったらいいんだろう?となりますね。
1つの解はループの中にもう一個ループを入れて、配列変数にせっせと1行ずつ追加していくパターンです。これだと特に式を使わず、アクションの組み合わせだけで処理できる点で有利です。
ループの外側で配列変数を初期化しておいて、作者のループ内にさらにもう1つ、各作者の書籍一覧でループ処理を入れている点が特徴です。
これだと1冊1冊処理しているので、時間はかかりますが、直感的ではありますね。
パターン3 : 1重ループ+Unionでがっちゃんこ
最後はパターン1と2のいいところ取りする方法です。
作者一覧でのループは残しますが、2重ループにせず、union()
関数で統合していきます。
ちょっとイメージしづらいかもしれませんが、ループの実行結果を見てみると少し理解できるかも?
注意しなければいけないのは、配列変数を一回 Compose (作成)アクションで退避しておくことと、今回は "配列変数への追加" ではなく、変数の更新のアクションを使っているところです。
これですべてのループが回ったあと、配列変数には3人の作者の書籍一覧が統合されていることになります。
メリットはループ1個減っていて軽い点ですね。デメリットは理解して使うまで慣れが必要なところでしょうか。特に一回変数を退避しておくあたりは普通の開発言語とも異なるので、違和感があるかもしれません。
おわり
ということで今回は複数の配列を1つの配列に統合する場合の実装パターン3選をご紹介しました。
どれもケースに応じて最適なものを選べばいいと思いますが、一度使っておくと取れる手段が増えていいかもしれません。
ちなみに私は圧倒的にパターン3を使っています。
お試しあれ!