もう一人のY君

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

もう一人のY君 MENU  MENU

【ショートカット】「リストから項目を取得」と「それぞれで繰り返す」

181022_00

 今回は「リストから項目を取得」と「それぞれで繰り返す」のアクションについてです.

 

ショートカット

ショートカット

  • Apple
  • 仕事効率化
  • 無料

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

 レビュー時のバージョン : v2.0

 

スポンサーリンク

 

 

わかりにくい「それぞれで繰り返す」

 「リスト」のアクションはここでも数回出てきた通りで複数の項目を表示し, それに応じて何らかのアクションを行う, その前段階のアクションです.

 タップしてWebサイトへ飛ぶようにするなどの仕組みにしたいならここから更に「リストから選択」などを用いるか, 手っ取り早く「メニューから選択」のアクションにした方が良いでしょう.

 

 問題は「それぞれで繰り返す」のアクションです.

 名前からしてswitch文に思えるこのアクションですが, まったく同じではなくswitch文のように式ごとに別の処理を行えるわけではありません(選択肢ごとに別の処理という点では上記で触れた「メニューから選択」の方が適当です, 代わりにメニュー自体が表示されますが).

 

 従って「それぞれで繰り返す」自身ではswitch文と同じ役割は果たせませんが工夫次第でなんとかなります.

 順を追って説明しましょう.

 

 

1:シンプルな繰り返し処理

181022_02

 まずはリストに挙げたコンテンツを順番に表示するだけのシンプルなショートカットを作ってみましょう.

 はじめに「リスト」アクションを追加し, 中身は適当なものにします.

 次に「リストから項目を取得」のアクションを追加します.

 取得する対象はいくつかありますが今回は「Rangeの項目」にします, タップしてこちらに切り替えましょう.

 「Rangeの項目」とはここでは直前に設置した「リスト」にある各項目自身を指します.

 今回は順番にすべて対象とするので

 

  • 項目取得の開始インデックス:1
  • 終了インデックス:2

 

とします, つまり上のリストにある1番目から2番目の項目を取得する…ということになります.

(バグなのか分かりませんが「終了インデックス」でキーボードから数を打てないことがありました, その際は一旦ショートカットを「完了」で閉じて開き直すと解決する場合があります)

 

 最後に「それぞれで繰り返す」アクションを追加し, その中に「結果を表示」のアクションを入れます. 

 

 

181022_03

 ちなみに「リストから項目を取得」アクションの対象はデフォルトの「最初の項目」以外に5つあります.

 「インデックス」は配列の番号を意味します.

 

 

181022_04

 「結果を表示」アクションに見える「繰り返しインデックス」や「繰り返し項目」の変数はマジック変数からは追加できず, キーボード上から選択する方法と, 

 

 

181022_05

 キーボード上の左端にある「変数」から下に表示されるのをタップすることで追加できます.

 

 

181022_06

 実行するとまず繰り返し1回目でインデックスの「1」とそのインデックスの項目である「1件」が, OKをタップすると「それぞれで繰り返す」が2回目になるのでインデックスの「2」とその項目である「2件」が表示されます.

 

 これで「リスト」と「リストから項目を取得」, そしてインデックスの関係が何となく分かったでしょうか.

 

 

リストの結果は配列となる

181022_07

 インデックスで触れたので繰り返しになりますがリストの結果は配列を成します.

 画像の通りリストから項目を取得をした直後の入力を変数に代入しても同じ結果を返しています.

 そのためリストに追加した各項目はその順にインデックスと一対一に対応します.

 ようは

 

  1. りんご
  2. みかん
  3. バナナ

 

と並べれば「『1つ目』は『りんご』」というように, 逆に「『りんご』は『1つ目』」と分かりますね.

 この1,2,3が「インデックス」, りんご, みかん, バナナは「項目」に相当します.

 

 なおこのショートカットアプリではインデックスは1から始まるようです.

 

 

例2:リストを用いてfor文を作る

 上記の例の通り, 「リストから項目を取得」では指定の範囲のインデックスを取得できるようになっています.

 つまり最終的には「リストの任意の配列(インデックスでも項目でも)を一つ取得」することができるわけです.

 

 これを利用してfor文っぽいものを作ってみます.

 

 

181022_08

 まず予め設定しておきたい変数をイニシャルとして記述しておきます.

 for(int n=0; ~) の n に相当する変数, そして最終結果を格納するための変数として初期値0で変数xを置きます.

 リストは適当な数を入れておきます, 今回は2つにしました.

 この2数を足し合わせる処理を行ってみます(どう考えても結果に対して効率の悪いことをしますがそこはスルーしてください).

 

 

181022_09

 続いてメイン部分です.

 「繰り返す」アクションで2回を指定します(「リストから取得」からインデックスを取得し, これを当てはめても良いです).

 リストのイニシャルをチェックしてその項目をxに足し合わせることで最終的に2数の和とします.

 そのため「リストから項目を取得」で「Rangeの項目」に変更, 「項目取得時の開始インデックス」と「終了インデックス」を共に変数nにします.

 これでリストにあるn番目の数が入力となったので「計算」で変数 x と足し合わせ, 再び x に上書きします.

 

 

181022_10

 このまま繰り返しを折り返すとインデックスが同じ番号のままになってしまうため, インデックス n に1を足す処理を行います.

 これで次の繰り返しは次のインデックスに対して行われます.

 繰り返しが終了したら「結果を表示」などで足し合わせた結果 x が正しいかを確認します.

 

 

181022_11

 実行すると結果が正しいことが分かりました.

 

 

181022_12

 上のままだと足し合わせる数を自由に変更できません.

 なので数をリストに直接書くのでなく, 「入力を要求」アクションで実行時に入力させ, リストには各々の「入力を要求」の結果をマジック変数で指定すれば自由度が上がります.

 その代り画像の通りでどれがどれだかわからないデメリットも…

 各々について一度変数に代入し, それをリストに貼れば混乱は避けられますが今度は全体がどんどん長くなります, 難しいですね.

 

 また今回は計算処理にのみ「繰り返し」を行いましたが入力についてもこれを使って配列にすれば, 多くの入力を要するシーンで有用になります(この場合リストは不要で「変数に追加」に代入して配列にすることとなります).

 

 

例3:二次関数の値を求める

 次は二次関数の各係数を指定し, 変数xの値も指定することでその値を求めるショートカットを「リスト」, 「それぞれで繰り返す」を使って作ります.

 

 

181022_13 

 まずは係数やxの値, 代入後の値 y のイニシャルです.

 次数ごとに計算し y に追加する手法を取るため y の初期値は0にしておきます.

 

 

181022_14

 続いて「リスト」を用いて先程の「入力を要求」によって得られた値を各次数に相当するリストに代入します.

 

 「入力を要求」+「変数を設定」の組み合わせとこちらと, 正直どっちもどっちなんですよね, 先程の通りで「リスト」の各項目にある「入力を要求」の値それぞれがどれのことなのか区別が付きません.

 いずれにしろこの「入力を要求」+「リスト」の組み合わせは「入力を要求」+「変数を設定」と同じ役割を果たします.

 

 

181022_15

 以上で各係数, 変数が用意されたので項別に計算します.

 まずは2次の項から.

 「変数を取得」で x の値を取得し, これを2乗し, 更に2次の係数と掛け合わせて変数 y に追加します.

 

 

181022_16

 続いて1次の項です.

 再び変数 x を入力として取得し, 今回は1次なのでそのまま1次の係数と掛け合わせ, y に加算します.

 最後に定数項ですね, 「変数を取得」で定数項の値を入力として取り込み, y に加算します.

 

 

181022_17

 以上で計算は終わったので結果を確かめるために「結果を表示」などで y を追加します.

 

 

181022_18

 実行して各係数やxの値を入力し, 結果が正しければOKです.

 

 

 例2のように「リストから項目を取得」によりインデックスを一つ取ることにより, for文に近い処理が行えます.

 また同じことを「次の場合」で行えばswitch文に近い処理となります.

 

 C言語などと違い, シンプルか高級か…という極端なニーモニックしかないため場合によってかなり冗長な内容となってしまいますね.