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

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

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

また面白そうな課題をお借りしました。

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

課題の内容

内容はこちらです。


今回は概要編です

今回はフローの概要と実行結果についてお話します。フローのロジック解説については別の回で話をします。

作成したフロー

アクションの設定を閉じた状態のフロー図

開いた状態のフロー図

実行イメージ

手動トリガーでフローを実行します。

整形対象の数字の並びは下図のアクションで定義しています。createArray 関数を使って配列にします。

今回のフローでは数字をあらかじめ昇順に並べています。

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


手動トリガーでフローを実行します。


お題の条件通りの出力になりました。連番になっていた数字の並びが「先頭~末尾」とい形に変わりました。
(`・ω・´)シャキーン

1~4,7,9,11,14~16,18~19,21~22

このフローのポイント

「一時的なデータを格納する変数」をうまく使うこと

このフローのポイントは、一時的なデータの格納場所を活用することで配列内の要素の並びが特定の条件に一致しているかどうか判定しているところです。


この手法は下記回で図を使って詳しく説明しています。
この回では、CSV内のカンマが「区切り文字」なのかそれとも「データに含まれる文字」なのかを判定するために一時領域を使用しています。
wataruf.hatenablog.com


同じ手法をこちらの回でも使っています。
wataruf.hatenablog.com

処理の主な工程

2つの繰り返し処理で目的を実現している

このフローでは「2つの繰り返し処理(Apply to each)」と「結合」アクションで配列の整形を実現しています。

繰り返し処理①「連番になっている箇所を配列内配列に置き換える」

まずひとつめの繰り返し処理です。ここでは数字の並びのうち連番になっている箇所を配列に置き換えています。

この処理によって、この配列が、、、

[1,2,3,4,7,9,11,14,15,16,18,19,21,22]


こうなります。連番になっている箇所が配列に置き換わりました。

["[1,2,3,4]","[7]","[9]","[11]","[14,15,16]","[18,19]","[21,22]"]


繰り返し処理が進むにつれて何が起きているか分かるように動画で表してみました。

それぞれの値がどう変わっているかに注目してください。

  • (繰り返し処理の)現在の値
  • 一時配列
  • 連続する数字の並びを子配列にした配列

streamable.com


繰り返し処理②「配列内配列を『先頭~末尾』の形式に置き換える」

次がふたつめの繰り返し処理です。この処理では、ひとつめの繰り返し処理で作成した配列内配列を『先頭~末尾』の形式に置き換えます。

この処理によって、この配列が、、、

["[1,2,3,4]","[7]","[9]","[11]","[14,15,16]","[18,19]","[21,22]"]


こうなります。

["1~4",7,9,11,"14~16","18~19","21~22"]


こちらも動画にしてみました。それぞれの値がどう変わっているかに注目してください。

  • (繰り返し処理の)現在の値
  • 整形後の配列

streamable.com

「結合」アクション

最後に、繰り返し処理②で出力された配列を結合アクションを実行します。これで目的の文字列が取得できました。

1~4,7,9,11,14~16,18~19,21~22

フローの処理ロジックについては次回の解説で

今回はここまでです。また数日以内に解説編を投稿する予定です。

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

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


今回は以上です。

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

wataruf.hatenablog.com