Dynamo 2.0 では[Dictionary]カテゴリのさまざまなノードが公開されており、使用することができます。作成、アクション、クエリー のノードがあります。
Dictionary.ByKeysValues
は、指定した値とキーでディクショナリを作成します。(項目数は、最短のリストの入力によります)
Dictionary.Components
は、入力ディクショナリのコンポーネントを作成します。(これはノードの作成と逆の操作です)。
Dictionary.RemoveKeys
は、入力キーが削除された新しいディクショナリのオブジェクトを作成します。
Dictionary.SetValueAtKeys
は、入力キーと値に基づいて新しいディクショナリを作成し、対応するキーで現在の値を置き換えます。
Dictionary.ValueAtKey
は、入力キーに対する値を返します。
Dictionary.Count
は、ディクショナリに含まれるキーと値のペア数を示します。
Dictionary.Keys
は、現在ディクショナリに格納されているキーを返します。
Dictionary.Values
は、現在ディクショナリに格納されている値を返します。
ディクショナリに関するあらゆるデータは、インデックスとリストを操作する従来の方法に代わる優れた手段です。
Dynamo 2.0 では、これまでに説明したディクショナリのノードだけでなく、コード ブロックにおけるディクショナリの新機能も導入されました。
次のような構文、つまりノードの DesignScript ベースの表現を使用できます。
ディクショナリは Dynamo のオブジェクト タイプであるため、次のアクションを実行できます。
このような操作は、Revit データを文字列に関連付ける場合に特に便利です。次に、Revit での使用例を見てみましょう。
Revit 内で、そこに含まれるデータの一部を使って検索しようとしたことがありますか?
次の例のような作業を行ったことがあるのではないでしょうか。
下図では、Revit モデル内のすべての部屋を収集し、必要な部屋のインデックスを(部屋番号で)取得し、最終的にそのインデックスにある部屋がわかります。
モデル内のすべての部屋を収集します。
検索する部屋番号。
部屋番号を取得し、その番号のインデックスを見つけます。
インデックスで部屋を取得します。
下のリンクをクリックして、サンプル ファイルをダウンロードします。
すべてのサンプルファイルの一覧については、付録を参照してください。
次に、ディクショナリを使用して、これを再作成してみましょう。まず、Revit モデル内のすべての部屋を収集する必要があります。
操作する Revit カテゴリを選択します(ここでは部屋を操作します)。
Dynamo に対して、これらの要素すべての収集を指示します。
次に、このデータを検索するために使うキーを決定する必要があります。(キーに関する情報は、「ディクショナリとは」セクションを参照してください)。
使用するデータは部屋番号です。
ここでは、指定されたキーと要素でディクショナリを作成します。
Dictionary.ByKeysValues ノードは、適切に入力されるとディクショナリを作成します。
Keys
は文字列であることが必要ですが、values
はさまざまなオブジェクト タイプにすることができます。
最終的に、部屋番号を使って、ディクショナリから部屋を取得することができます。
String
は、ディクショナリからオブジェクトを検索するために使用しているキーです。Dictionary.ValueAtKey ノードで、ディクショナリからオブジェクトを取得します。
ディクショナリによるこの同じ方法を使用して、グループ化されたオブジェクトでディクショナリを作成することもできます。指定されたレベルですべての部屋を検索する場合、上のグラフを次のように修正できます。
キーとして部屋番号を使用するのではなく、パラメータの値(ここではレベル)を使用できます。
これで、部屋をそのレベルごとにグループ化することができます。
レベルごとにグループ化された要素を使用することで、共有のキー(固有のキー)をディクショナリのキーとして使用し、部屋のリストを要素として使用できるようになります。
最終的に、Revit モデル内のレベルを使用して、ディクショナリ内で、そのレベルに配置されている部屋を検索できます。
Dictionary.ValueAtKey
は、レベル名を取得して、そのレベルの部屋オブジェクトを返します。
[Dictionary]カテゴリのノードを使用する機会は、実際には無限にあるのです。Revit 内の BIM データを要素自体に関連付けることができるので、さまざまな使用例が考えられます。
Dynamo 2.0 では、ディクショナリのデータ タイプをリストのデータ タイプと分離する概念が導入されました。この変更により、ワークフローにおけるデータの作成や操作の方法が大幅に変更される可能性があります。2.0 よりも前のバージョンでは、ディクショナリとリストは 1 つのデータ タイプとして統合されていました。つまり、リストが実際には整数キーを持つディクショナリだったのです。
ディクショナリは、キーと値のペアの集合で構成されたデータ タイプで、各キーは各集合に固有です。ディクショナリは順序付けされておらず、基本的には、リストにあるようなインデックス値の代わりにキーを使用して「調べる」ことができます。Dynamo 2.0 では、キーに文字列のみを使用できます。
リストは、順序付けされた値の集合で構成されたデータ タイプです。Dynamo では、リストはインデックス値として整数を使用します。
ディクショナリは、リストと分離されたことによって第一級オブジェクトとなりました。そのため、インデックス値を覚えたり、ワークフロー全体で厳密なリスト構造を維持することなく、値の格納や検索をすばやく容易に行うことができます。ユーザのテストにおいて、複数の GetItemAtIndex
ノードの代わりにディクショナリを使用した場合に、グラフのサイズが大幅に低減することがわかりました。
構文 の変更により、コード ブロック内のディクショナリとリストの初期化および操作の方法が変更されました。
ディクショナリは {key:value}
の構文を使用します。
リストは [value,value,value]
の構文を使用します。
ディクショナリを作成、編集、クエリーするための 新しいノード が、ライブラリに追加されました。
v1.x のコード ブロックで作成されたリストは、スクリプトのロード時に、角括弧 [ ]
を波括弧 { }
の代わりに使用する新しいリスト構文に自動的に移行されます。
コンピュータ サイエンスにおいて、ディクショナリはリストのように、オブジェクトの集合です。リストは特定の順序で並んでいますが、ディクショナリは 順序なし の集合です。一連番号(インデックス)に依存せず、キー を使用します。
次の画像では、可能性のあるディクショナリの使用例を示しています。多くの場合、ディクショナリを使用して、直接的な関係を持たない 2 つのデータを関連付けます。ここでは、スペイン語バージョンの単語を英語バージョンに接続して、後で検索できるようにしています。
2 つのデータを関連付けるディクショナリを作成します。
指定されたキーを使用して値を取得します。
ディクショナリは、キーと呼ばれる別のデータと関連付けられているデータの集まりです。ディクショナリでは、データを検索、削除、および挿入する機能が公開されています。
基本的には、ディクショナリを非常にスマートな検索手段と考えることができます。
ディクショナリの機能はこれまで Dynamo 内で利用可能でしたが、Dynamo 2.0 では、このデータ タイプを管理する新しい方法を導入しました。
オリジナル画像提供: