ルドルフもわたるふもいろいろあってな

Microsoft 365、Power Platform、PowerShellについて調べたことや検証したことなどを投稿します。技術の話は面白い。

【Power Automate】【クイズ・パズル】【解説編その2】数字の配列で連番部分をルールに従って整形する

掲題のフローの解説編その2です。

今回作成したフローをGitHubで公開しました。下記リンク先からダウンロードしてください。
github.com

解説の経緯

今回の投稿は概要編解説編その1の続きです。

「解説編その2」の解説する範囲

「解説編その2」解説する範囲は前回に引き続きこの3つです。今回はステップごとの解説をします。

  1. 処理対象である数字の配列を定義
  2. フローで使う変数を定義
  3. 繰り返し処理「連番になっている箇所を配列内配列に置き換える」
  4. 繰り返し処理「配列内配列を『先頭~末尾』の形式に置き換える」
  5. 配列を文字列に変換


ステップごとの解説

「手動でフローをトリガーします」トリガー

名前の通り、フローを手動で実行するトリガーです。今回はこのトリガーでの入力情報はありません。


「作成-元の配列」アクション

このアクションは「データ操作」>「作成」アクションです。

createArray(1,2,3,4,7,9,11,14,15,16,18,19,21,22)

処理対象である配列を作成します。


「変数を初期化する-一時配列」アクション

このアクションは「変数」>「変数の初期化」アクションです。

createArray(outputs('作成-元の配列')[0])

一時配列という変数に処理対象である配列の最初の要素を入れることを表しています。

こうしている理由は、今回の範囲で実行している繰り返し処理の内容が「現在のアイテム」の要素と「1つ前の繰り返し処理」の要素を比較しているためです。

先頭の要素には当然前回の要素がありません。そのため、先頭の要素は繰り返し処理の対象にはせずにあらかじめ配列にいれておきます。

「解説編その1」の図で表すと以下の通りです。


「変数を初期化する-連続する数字の並びを子配列にした配列」アクション

このアクションは「変数」>「変数の初期化」アクションです。

この配列は今回の範囲の処理によって最終的に得られる配列です。ここでは空の配列としておきます。

「変数を初期化する-整形後の配列」アクション

このアクションは「変数」>「変数の初期化」アクションです。

この配列はフローによって得ようとしている最終的な配列です。ここでは空の配列としておきます。

「Apply to each」

このアクションは「コントロール」>「それぞれに適用する」です。

この繰り返し処理のインデクサは、処理対象の配列の2行目以降です。

先頭の要素は処理の対象外にしています。そのため、skip関数を使って1行目を飛ばしています。

skip(outputs('作成-元の配列'),1)


「作成-このループの入力」

このアクションは「データ操作」>「作成」です。このアクションはフローを実行する際にそれぞれの変数の値を可視化するために配置しています。

このアクションを削除しても処理内容には影響ありません。


入力情報

現在の値: @{items('Apply_to_each')}
一時配列: @{variables('一時配列')}
連続する数字の並びを子配列にした配列: @{variables('連続する数字の並びを子配列にした配列')}



「作成-一時配列の最後の要素に1を加えた数値」

このアクションは「データ操作」>「作成」です。このアクションで「前回の繰り返し処理」における「現在のアイテム」を取得しています。ここで取得した値を後続の条件分岐で使用します。

add(last(variables('一時配列')),1)


「条件-「一時配列の最後の要素」と「現在のアイテムの数値」が一致する」

これは「コントロール」>「条件」アクションです。「前回の値に1を追加した数字」と「今回の値」が一致しているかどうかを判定しています。つまり、連番であるかどうかを判定しています。

条件

@items('Apply_to_each')

@outputs('作成-一時配列の最後の要素に1を加えた数値')
が一致している


「はいの場合」に実行する処理は以下の通りです。

「現在のアイテム」を「一時配列」に追加しています。「解説編その1」でそれを表しているのがこの図です。


「いいえの場合」に実行する処理は以下の通りです。

「一時領域」配列を「連続する数字の並びを子配列にした配列」配列に追加したうえで、「一時領域」を「現在のアイテム」で上書きします。「解説編その1」でそれを表しているのがこの図です。


「条件-最後の要素である」

これは「コントロール」>「条件」アクションです。最後の繰り返し処理であるかどうかを判定します。

条件

@items('Apply_to_each')

@last(outputs('作成-元の配列'))
が一致している


「はいの場合」に実行する処理は以下の通りです。

「一時領域」配列を「連続する数字の並びを子配列にした配列」配列に追加します。「解説編その1」でそれを表しているのがこの図です。


「いいえの場合」に実行する処理は以下の通りです。特に実行する処理はありません。

「作成-このループの出力」

このアクションは「データ操作」>「作成」アクションです。このアクションは「作成-このループの入力」と同じくフローを実行する際にそれぞれの変数の値を可視化するために配置しています。

このアクションを削除しても処理内容には影響ありません。

入力情報

"一時配列: @{variables('一時配列')}
連続する数字の並びを子配列にした配列: @{variables('連続する数字の並びを子配列にした配列')}

このフローをGitHubで公開しました。(再掲)

フローをGitHubで公開しました。下記リンク先からダウンロードしてください。この投稿の冒頭で記載しているリンクと同じです。
github.com

次回の解説は

次回の解説の対象は2つめの繰り返し処理です。


今回は以上です。

追記:「解説編その3」を投稿しました。

wataruf.hatenablog.com