もう一人のY君

主にiPhoneのショートカットアプリのレシピやTipsなどを書いています. たまに数学の記事も書きます.

もう一人のY君 MENU  MENU

【iPhoneショートカット】重複する文字を取り除く【並び順所保持】

f:id:thetheorier:20220203170130p:plain

 前回はフィルタを使って並び替えを行ったものを結果としました.

 今回は元の順番のまま、重複を取り除きます.

 (前回は「数」と謳っていましたが実際は他の文字でも可能です)

 

 

ショートカット

ショートカット

  • Apple
  • 仕事効率化
  • 無料

※価格は記事執筆時のものです. 現在の価格はApp Storeから確認ください.

 レビュー時のiOSバージョン : iOS15.3

 

 

スポンサーリンク

 


 

 

 

前回

blog.thetheorier.com

 前回同様「辞書」アクションの性質を使います.

 

 

 

レシピ

f:id:thetheorier:20220218131329p:plain

 前回同様、空の「辞書」アクションを追加し、これを今回は変数名listでおきます.

 やはり前回触れましたが、一通りレシピを作り終えたらこの2つのアクションは不要です.

 

 次に具体的なテキストの列を用意します、今回もまた「テキスト」アクションに直書きしたものを用意しました.

 画像の通り、484という重複列が2つあります.

 

 

f:id:thetheorier:20220218131648p:plain

 文字列を分割し、項目数をカウントしておき、更に内部演算用にこの数を変数tmpで置きます.

 

f:id:thetheorier:20220218131806p:plain

 上で得た項目数分だけ繰り返します.

 分割した項目からまずtmp番目を取り出します.

 これを「辞書の値を設定」で

  • キー → リストからの項目(tmp番目)
  • 値  → tmp

とします.

 つまり後ろから順に「辞書の値を設定」で追加していきます.

 こうすることで重複する項目(キー)は最終的にもっとも若いものが上書きで残ることになります.

 これを改めて同じ変数listに設定し、内部変数tmpを1つ減らします.

 

 前回は「辞書の値を設定」で設定する値自体を使わなかったため適当にしていました.

 今回はオリジナルの並び順を記憶しておく必要があるため、期待に沿う値であることが求められます.

 内部変数tmpはそういう目的で使っています.

 

 重複する項目のうち最後のものを残したい場合はtmpの初期値を1、繰り返しでの更新はtmp-1でなくtmp+1に変更することとなります.

 

 こうして作られた辞書listは、キーに対象の項目が、そして値にもともとの順番(番号)が与えられたものになっています.

 しかしショートカットの仕様で各々の組の順序はバラバラになっています、そのためこのままキーを全部取り出しても元の順番であることはまずありません.

 そこでここで作った辞書のキーと値をひっくり返した辞書を作ります.

 

 

f:id:thetheorier:20220218132637p:plain

 というわけで辞書listのキーに対して「各項目を繰り返す」アクションを追加します.

 辞書listの繰り返し項目をキーとする値、つまり項目の番号を取り出します.

 後者を改めてキー、前者を改めて値とする辞書を作ればよいので「辞書の値を設定」と「変数を設定」で新しい辞書list'に追加していきます.

 

 この辞書list'は改めて説明すると、キーが項目の番号、値は対象の項目からなり、重複する組はすでに除かれています.

 この辞書もやはりそのままではバラバラですが、キーが番号となっているためフィルターを使って並び替えた上で処理すればこれを防ぐことが可能です.

 

 

f:id:thetheorier:20220218133036p:plain

 そこで辞書list'のすべてのキーに対して「ファイルにフィルタを適用」を使って昇順に並べ、これに対して「各項目を繰り返す」を行います.

 辞書list'に対して繰り返し項目をキーとする値を取り出し、これを新しい変数list''に追加していきます.

 この変数list''が求めている結果であるはずです.

 

 

f:id:thetheorier:20220218133338p:plain

 確認のため変数list''の項目数を数え、もとの列からどう変化しているか「結果を表示」で確認してみます.

 

 

f:id:thetheorier:20220218133450p:plain

 実行結果が上の画像です.

 途中の辞書list'のキーと値がlistと入れ替わっていること、取り出した結果が正しく減っていること、並び自体がオリジナルと変わらないことがわかります.

 

 

 例に挙げた場合では項目数10個なので待たされることはありませんが、数が増えるとどんどん重くなります.

 

 実際にはこういった処理は全体の一部であることが多いでしょう、なので項目数が多い場合は予め減らす工夫をしたり、このアイデア自体を見直すことが必要になるかもしれません.