データを取り扱うのに便利なアクションである「辞書」の基本と簡単な応用をまとめておきます.
※価格は記事執筆時のものです. 現在の価格はApp Storeから確認ください.
レビュー時のiOSバージョン : iOS16.3.1
スポンサーリンク
辞書=鍵と値のペア
「辞書」アクションは、鍵(key)と値(value)の組の集まりとして構成されるものです.
任意の鍵に対して対応する値を指定するため関数のような役割も持ちます.
辞書の値は
- テキスト
- 数字
- 配列(リスト)
- 辞書
- ブール値
の5種類から選びます.
「キー」の部分に鍵となる文字列を、それに対応する値を右枠に入力して一組となります.
この時点で実行してみると
{"a":"bcd"}
という結果が返ってきます.
これが上の「辞書」の結果をjsonというデータ記法で表したものになります.
複数の組であればjsonだとカンマで組を区切ります.
なおキーbの値にダブルクォーテーション"がありませんが、これは値の属性が数字であることを意味します.
おおまかな説明として、キーはダブルクォーテーションが必須で値がダブルクォーテーションで区切られている場合はテキスト、無い場合は数字、[]で囲まれる場合は配列、trueやfalseがブール値…となっており、辞書アクションは概ねjsonと同じ振る舞いをします.
値として配列や辞書を選択した場合、その中身は別フォームに書き込みことになります.
辞書の値を取得
次は「辞書の値を取得」アクションです.
キーと値の組である辞書に対してキーを指定することで必要な値を取り出すのに使います.
既に存在する辞書を対象にし、取り出したい値の組となるキーを入れることで必要な値が出力されます.
デフォルトでは上の通りですが、「値」の部分をタップすると「すべてのキー」「すべての値」に変更することもできます.
例えば「すべてのキー」にしてみると…
対象の辞書に含まれるキーのすべてが配列(リスト)となって出力されます.
「すべての値」についても同様です.
マジック変数のオプションを使う
辞書の値を取り出す別の方法として、オプションから指定することもできます.
マジック変数ないし対象の辞書を成す変数をタップするとメニューが出てきます.
ここからすべてのキーや値だけでなく他の属性も出力できます.
これは辞書だけでなく他の種類についても使えます(モノによって多少異なります).
メニューの一番下に「キーの値を取得」という入力枠があるので、ここでキーを入れることで必要な値を取り出すことができます.
「辞書の値を取得」に比べアクション数が1つ減らせるメリットがありますが、どの辞書なのかはパッと見てわからなくなるデメリットがあります.
またこの「キーの値を取得」の入力枠ではマジック変数を含む変数は使えません.
なので変数を介して値を扱いたい場合、繰り返し処理などでキーが変動する状況などではこの方法は使えないので注意です.
辞書の値を設定
先程は辞書の値を取り出すアクションでしたが「辞書の値を設定」は既存の値を上書きしたり追加することができます.
例えばキーa、値がbcdとなっている辞書に対して値がdefとなるよう「辞書の値を設定」を追加してみます.
するとbcdであったキーaの値がdefに変わりました.
またキーがaとbしかない辞書に対してキーcの組を設定してみると…
設定したキーと値の組が追加されました.
なお、このアクションで追加した値の種類は強制的に「テキスト」になります.
数字であろうがtrueやfalseと入れようがテキストの扱いになります.
同じキーが複数ある場合
何らかの理由で同じキーが複数存在する辞書になる場合があります.
そのような辞書でそのキーの値を取り出すとどういう結果が返ってくるでしょうか.
結果は、重複するキーの組については一番先頭のもののみ残り、それ以外は削除されます.
JSONで直接扱う
ショートカットではJSONを直接書いて辞書とすることも可能です.
「テキスト」アクションに書いたり、あるいはネットを介して得たJSONデータを取り込みます.
辞書として取り込めば、値の属性もきちんと取り扱うことができます.
「入力から辞書を取得」を介さず直接扱うことももちろん可能です.
しかしこうして設定した変数は常に「テキスト」扱いとなるため、値を取り出すなどの処理をするたびに種類を辞書に変更し直す手間が生じます.
処理が少なければいいですが頻繁に使う場合は正しい種類(今回は辞書)にしてから変数に設定するのが望ましいです.
plistを使う
plistとはプロパティリストの略で、アプリ開発や(過去の)解析ログなどに見られるテキスト形式です.
JSONと違い日付や浮動小数点といった属性も扱うことができます.
今回紹介したplistというのはXMLという形式のものであり、画像のようにkeyというタグと属性に応じたタグの組を使います.
先頭の3行とplistタグは深く考えず「こう書いておけばいい」くらいに理解してください.
「入力から辞書を取得」アクションにより、その出力の時点でplistからJSONに置き換わります.
例えばJSONはplistにおけるinteger(数値)とreal(浮動小数点)の区別はつかず、どちも数扱いになります.
Tips
キーから選択
リストから項目を選択し、対応する値を取得するには辞書を使うのが便利です.
辞書に対して「リストから選択」アクションを使います.
「リストから選択」の対象として辞書を入れ、これをタップしてメニューから「キー」に切り替えます.
これで対象の辞書のキーを選択肢とすることができます.
対応する辞書について選択した項目をキーとして「辞書の値を取得」を使えば選択したキーの値を取り出すことが可能です.
リストから選択した結果であるキー、それを使って取り出した値が確認できます.
「ファイルにフィルタを適用」ですべてのキーを好きに並び替えてから「リストから選択」をすることももちろん可能です.
また、「リストから選択」の対象を辞書そのものにすると、選択肢の項目に各キーの値も表示されます.
但し値が辞書の場合は表示されず、配列の場合は項目数のみの表示となります.
深い階層の値を取り出す
例えば値の種類が辞書であるキーcに対してキーがf、値が0の辞書を考えます.
JSONで書くと{"c":{"f":0}}ですね.
ここから値0を取り出してみます.
ベタなやり方だと、まず元の辞書からキーcの値を取り出し、その値である辞書からキーfの値を取り出します.
これで望む値は取り出せますが冗長なレシピですね.
「辞書の値を取得」アクションの説明にある通り、深い階層の値を指定するのにドットを挟んで下のキーを並べることが可能です.
今回であればキーcの値である辞書{"f":"0"}なので、値0を取得するのに「辞書の値を取得」のキーの部分に
c.f
と入力することができます.
これでアクションが2つ省略できました.
この記法はマジック変数のオプションでも使えます.
よって場合によっては「辞書の値を取得」アクションすら不要となります.
値がリストで、好きな場所の値だけ欲しい場合もあります.
例えば画像のような辞書{"a":[10,20,30,40]}でキーaの値のうち1番目である10が欲しいとします.
その場合は「辞書の値を取得」のキーに
a.1
と入れます、つまり「キーaの1番目」ということですね.
画像のように、より複雑で深い階層も簡単に記述できます.
空の辞書から使う
通常、辞書は何らかのキーと値の組を入力して使います.
しかし状況によっては真っ新な状態から使いたい場合もあるものです.
例えば画像のように何も書かれていない辞書を変数に置き、「辞書の値を設定」でキーと値の組を追加します.
この状態で元の辞書はもちろん、dictと名付けるのに使った「変数に設定」アクションすらも取り除いてみます.
当然これによって変数dictは警告の赤文字になってしまいます.
しかしこの状態でも変数dictはちゃんと機能しています.
この仕様はOSのバージョンによって少しずつ異なるので常に使える保証はありません.
不安であればそのまま空の辞書を残しておくべきですね.
〆
「辞書」アクションは慣れるとデータの扱いがとても便利になります.
辞書そのものが一つのアクション・出力なので複数のデータを次の入力に渡すことが可能になり、レシピの幅が広がります.