もう一人のY君

iPhoneアプリのレビューやアップデートレビューなどを書いています. たまに数学の記事も書きます.

もう一人のY君 MENU  MENU

【iPhoneショートカット】重複を許す・許さないランダムリストを作る

 

 数字を並び替えるには「乱数」や「ファイルにフィルタを追加」のオプションが想定されますが目的によって重複を許すかどうかが分かれます.

 それぞれについて具体例を作ってみることにします.

 

 

ショートカット

ショートカット

  • Apple
  • 仕事効率化
  • 無料

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

 レビュー時のiOSバージョン : iOS17.0.3

 

 

スポンサーリンク

 


 

 

 

イニシャル

 目的は違えど必要な情報として

 

  • リストする個数N
  • 最小値m
  • 最大値n

 

の値が必要なので各々を「入力を要求」で決定しておきます.

 これらの値は各々で使いまわします.

 

 

重複を許す場合

 重複を許す場合はとても簡単です.

 「乱数」アクションでmからnまでの数をランダムにN回拾うだけです.

 

 

重複を許さない場合1

 重複させたくない場合はどうすればいいでしょう?

 まず考えられる方法は次のようなものです.

 

  1. mからnまでのリストを作る
  2. 1をランダムに並び替える
  3. 2の先頭からN個分取り出す

 

 n-m>Nを満たさないと3の時点でエラーを起こすことが想定できますが今回はそのエラー処理は無視します.

 

 

 まずmからnまでの昇順リストを作ります.

 tmpと名付けた変数にmを代入しておき、「繰り返す」でmからnまでのn-m+1回繰り返させます.

 リストとして格納する変数valueにtmpを追加し、tmpを1足して繰り返せばOKです.

 

 

 このリストvalueを「ファイルにフィルタを適用」でランダムにすればいいのですがこうして作った変数valueはフィルタにとっては1要素として扱われます.

 なので「テキストを分割」で改行分割してからフィルタします.

 並び順序を「ランダム」、制限はオンにして変数Nに置き換えるか、適用したフィルタの結果に対して「リストから項目を取得」で先頭からN項目まで取り出します(画像は後者).

 

 

重複を許さない場合2

 同じく重複を許さない場合ですがここでは「辞書」アクションの性質(バグ?)を利用します.

 

 

 まず空のままの「辞書」を追加し、これを適当な変数に置きます.

 レシピが完成したらこの部分(画像で赤で囲んだ部分)は取り除いても機能します.

 次に最小値mを一時的な変数tmpに置きます.

 

 

 これを使ってキーがmからnの数字となる辞書を作ります.

 前回同様n-m+1回の繰り返しになりますが、今回は「辞書の値を設定」でキーに先程の一時変数tmpと宛てがいます.

 値は空っぽのままだとエラーを起こすので半角スペースでもなんでもいいので文字を入れておいてください(赤矢印).

 最後にtmpを1足して更新して繰り返させます.

 

 

 最後に「ファイルにフィルタを適用」で上で作った辞書のキーに対してランダムにフィルタさせます.

 入力に辞書を入れタップし、「辞書」にチェックが入っているのを「キー」に切り替えます.

 

 

結果

 「乱数」アクションを単純に使った場合は当然ながら重複する数字があったりなかったりします.

 

 

 mからnまでランダムに並べてN個取り出した場合は重複する余地がありません.

 

 

 「辞書」を使った場合もmからnまでのキーを使っているので重複は起こりません.

 

 

 N=1000の場合で数回試しましたがどの場合も処理時間はほぼ変わりませんでした.

 

 「辞書」を使って重複なしにランダムにする方法は仕様変更で修正される可能性があるため確実にやるなら前者でしょうね.