前回はフィルタを使って並び替えを行ったものを結果としました.
今回は元の順番のまま、重複を取り除きます.
(前回は「数」と謳っていましたが実際は他の文字でも可能です)
※価格は記事執筆時のものです. 現在の価格はApp Storeから確認ください.
レビュー時のiOSバージョン : iOS15.3
スポンサーリンク
前回
前回同様「辞書」アクションの性質を使います.
レシピ
前回同様、空の「辞書」アクションを追加し、これを今回は変数名listでおきます.
やはり前回触れましたが、一通りレシピを作り終えたらこの2つのアクションは不要です.
次に具体的なテキストの列を用意します、今回もまた「テキスト」アクションに直書きしたものを用意しました.
画像の通り、484という重複列が2つあります.
文字列を分割し、項目数をカウントしておき、更に内部演算用にこの数を変数tmpで置きます.
上で得た項目数分だけ繰り返します.
分割した項目からまずtmp番目を取り出します.
これを「辞書の値を設定」で
- キー → リストからの項目(tmp番目)
- 値 → tmp
とします.
つまり後ろから順に「辞書の値を設定」で追加していきます.
こうすることで重複する項目(キー)は最終的にもっとも若いものが上書きで残ることになります.
これを改めて同じ変数listに設定し、内部変数tmpを1つ減らします.
前回は「辞書の値を設定」で設定する値自体を使わなかったため適当にしていました.
今回はオリジナルの並び順を記憶しておく必要があるため、期待に沿う値であることが求められます.
内部変数tmpはそういう目的で使っています.
重複する項目のうち最後のものを残したい場合はtmpの初期値を1、繰り返しでの更新はtmp-1でなくtmp+1に変更することとなります.
こうして作られた辞書listは、キーに対象の項目が、そして値にもともとの順番(番号)が与えられたものになっています.
しかしショートカットの仕様で各々の組の順序はバラバラになっています、そのためこのままキーを全部取り出しても元の順番であることはまずありません.
そこでここで作った辞書のキーと値をひっくり返した辞書を作ります.
というわけで辞書listのキーに対して「各項目を繰り返す」アクションを追加します.
辞書listの繰り返し項目をキーとする値、つまり項目の番号を取り出します.
後者を改めてキー、前者を改めて値とする辞書を作ればよいので「辞書の値を設定」と「変数を設定」で新しい辞書list'に追加していきます.
この辞書list'は改めて説明すると、キーが項目の番号、値は対象の項目からなり、重複する組はすでに除かれています.
この辞書もやはりそのままではバラバラですが、キーが番号となっているためフィルターを使って並び替えた上で処理すればこれを防ぐことが可能です.
そこで辞書list'のすべてのキーに対して「ファイルにフィルタを適用」を使って昇順に並べ、これに対して「各項目を繰り返す」を行います.
辞書list'に対して繰り返し項目をキーとする値を取り出し、これを新しい変数list''に追加していきます.
この変数list''が求めている結果であるはずです.
確認のため変数list''の項目数を数え、もとの列からどう変化しているか「結果を表示」で確認してみます.
実行結果が上の画像です.
途中の辞書list'のキーと値がlistと入れ替わっていること、取り出した結果が正しく減っていること、並び自体がオリジナルと変わらないことがわかります.
〆
例に挙げた場合では項目数10個なので待たされることはありませんが、数が増えるとどんどん重くなります.
実際にはこういった処理は全体の一部であることが多いでしょう、なので項目数が多い場合は予め減らす工夫をしたり、このアイデア自体を見直すことが必要になるかもしれません.