Словари представляют собой набор данных, который связан с другим объектом данных, известным как ключ. Словари позволяют выполнять поиск, удаление и вставку данных в коллекциях.
По сути, словарь является эффективным механизмом поиска данных.
Функции работы со словарями присутствовали во многих версиях Dynamo. В приложении Dynamo 2.0 представлен новый способ управления данными этого типа.
Изображение предоставлено sixtysecondrevit.com
Вам когда-нибудь приходилось искать в Revit информацию по фрагменту данных?
Вы наверняка уже проделывали нечто похожее на описанное в следующем примере.
Процесс, проиллюстрированный ниже, включает следующие этапы: сбор всех помещений в модели Revit, получение индекса нужного помещения (по его номеру) и, наконец, извлечение этого помещения по индексу.
Объединение всех помещений в модели.
Номер необходимого помещения.
Получение номера помещения и определение индекса.
Получение помещения по индексу.
Скачайте файл примера, щелкнув указанную ниже ссылку.
Полный список файлов примеров можно найти в приложении.
А теперь посмотрите, как тот же процесс выглядит при использовании словарей. Сначала необходимо собрать все помещения в модели Revit.
Выберите нужную категорию Revit (в данном случае работа ведется с помещениями).
Запрограммируйте сбор всех таких элементов в Dynamo.
Затем необходимо решить, какие ключи будут использоваться для поиска этих данных. Сведения о ключах см. в разделе Что такое словарь.
Данные, которые будут использоваться, — это номер помещения.
Теперь создайте словарь по заданным ключам и элементам.
Узел Dictionary.ByKeysValues создает словарь с соответствующими входными данными.
Данные
Keys
должны быть строковыми, а полеvalues
поддерживает разные типы объектов.
Наконец, извлеките помещение из словаря с номером помещения.
Порт
String
выдает ключ, который используется для поиска объекта в словаре.Метод Dictionary.ValueAtKey получает объект из словаря.
Используя аналогичную логику работы со словарями, можно создавать словари, содержащие сгруппированные объекты. Если нужно найти все помещения на конкретном этаже, измените приведенный выше график следующим образом.
Вместо использования номера помещения в качестве ключа, можно использовать значение параметра (в данном случае этаж).
Теперь можно сгруппировать помещения по этажу, на котором они находятся.
Когда элементы сгруппированы по этажам, можно использовать общие (уникальные) ключи в качестве ключей для словаря, а списки помещений — в качестве его элементов.
Наконец, используя этажи, заданные в модели Revit, выполните поиск в словаре всех помещений, расположенных на нужном этаже. Метод
Dictionary.ValueAtKey
использует имя этажа в качестве входных данных и возвращает объекты помещений на этом этаже.
Возможности использования словарей практически безграничны. Сама по себе возможность соотнесения данных BIM в Revit с тем или иным элементом открывает широкий спектр вариантов применения.
Dynamo 2.0 включает новый тип данных — список, являющийся ответвлением типа данных словаря. Это нововведение может повлечь за собой существенные изменения в подходах к созданию и использованию данных в рамках рабочих процессов. До версии 2.0 словари и списки относились к одному типу данных. Если говорить коротко, то списки — это словари с целочисленными ключами.
Словарь — это тип данных, образуемый набором пар «ключ — значение». Ключ каждого набора является уникальным. Содержимое словаря не упорядочено. Поиск данных осуществляется с использованием ключа, а не по значению индекса, как в списке. В Dynamo 2.0 поддерживаются только строковые ключи.
Список — это тип данных, образуемый набором упорядоченных значений. В списках Dynamo в качестве индексов используются целочисленные значения.
В результате разделения словарей и списков словари получили своеобразный статус высшего класса: они позволяют легко и быстро хранить и находить значения, и для этого не нужно запоминать значения индекса или поддерживать строгую структуру списка на протяжении всего рабочего процесса. На этапе тестирования было выявлено значительное уменьшение размеров графиков при использовании словарей вместо нескольких узлов GetItemAtIndex
.
Синтаксис: обновления привели к изменениям в процессах запуска и использования словарей и списков в блоках кода.
В словарях используется следующий синтаксис: {key:value}
.
В списках используется следующий синтаксис: [value,value,value]
.
В библиотеку добавлены новые узлы, которые позволяют создавать, изменять и запрашивать словари.
Списки, созданные в блоках кода версии 1.x, при загрузке сценария автоматически обновляются до нового синтаксиса списка, в котором используются квадратные скобки [ ]
вместо фигурных { }
.
С точки зрения информатики как науки, словари, как и списки, являются наборами объектов. Элементы в списках хранятся с соблюдением определенного порядка. Содержимое словарей не упорядочивается. В словарях не используется последовательная нумерация (индексы). Вместо этого в них используются ключи.
На изображении ниже представлен пример возможного использования словаря. Во многих случаях словари используются для соотнесения двух элементов данных, которые могут не иметь прямой корреляции. В нашем случае испанский перевод английского слова соотносится с его оригиналом для поиска в дальнейшем.
Создайте словарь, чтобы связать два фрагмента данных.
Получите значение с помощью заданного ключа.
В Dynamo 2.0 доступны различные узлы Dictionary для работы со словарями. К ним относятся узлы создания, действия и запроса.
1. С помощью метода Dictionary.ByKeysValues
создается словарь с заданными значениями и ключами. Количество записей определяется кратчайшим входным списком.
2. Метод Dictionary.Components
создает компоненты входного словаря. (Это функция, противоположная функции узла создания).
3. Метод Dictionary.RemoveKeys
создает объект словаря с удаленными входными ключами.
4. Метод Dictionary.SetValueAtKeys
создает словарь на основе входных ключей и значений, заменяющих текущее значение в соответствующих ключах.
5. Метод Dictionary.ValueAtKey
возвращает значение во входном ключе.
6. С помощью метода Dictionary.Count
можно узнать, сколько пар «ключ — значение» хранится в словаре.
7. Метод Dictionary.Keys
возвращает наименования ключей, хранящихся в настоящий момент в словаре.
8. Метод Dictionary.Values
возвращает значения, хранящиеся в настоящий момент в словаре.
Соотнесение данных с помощью словарей — это отличная альтернатива традиционным методам работы с индексами и списками.
Dynamo 2.0 не только включает в себя узлы для работы со словарями, но и аналогичные новые функции в кода блоках.
Можно использовать как приведенный ниже синтаксис, так и представления узлов на основе DesignScript.
Поскольку словарь является типом объекта в Dynamo, с ним можно выполнять следующие действия.
Подобные виды взаимодействия особенно важны при соотнесении данных Revit со строками. Далее приводятся примеры использования этой функции Revit.