Dynamo – Русский – только для чтения
Раздел для программистов и специалистов, использующих Dynamo
отмена
Отображаются результаты для 
Показать  только  | Вместо этого искать 
Вы имели в виду: 

dynamo: Как сортировать по двум параметрам?

8 ОТВЕТ 8
РЕШЕНО
Ответить
Сообщение 1 из 9
Dronov.Dmitry
2240 просмотров, 8 ответов

dynamo: Как сортировать по двум параметрам?

Вопрос вроде бы простой но что то у меня не выходит.

Задача:

есть параметры дверей ширина и высота.

как мне в динамо взять ширину, потом высоту а потом отсортировать вначале по ширине а потом по высоте как в ведомости ревита. 

8 ОТВЕТ 8
Сообщение 2 из 9
alexey.lobanov
в ответ: Dronov.Dmitry

На самом деле не такой уж и простой)) Так как подходов к множественной сортировке сущствует много и ни один из них не реализован какими-то специальными нодами.

 

Самый простой способ, который тут сразу приходит а голову:

 

Тут смысл в том, что мы находим типоразмеры дверей. Находим их ширину и высоту. Все это раскладывается по отдельным спискам.

Далее мы можем подумать, какой способ сортировки реализовать. Он может быть многопроходным(сначала сортируем по первому, потом по второму итд) или однопроходной. Хотелось-бы кончно за один проход все сделать. Для этого нам необходимо сгенерировать еще одно свойство этомента, которое будет однозначно в себе "кодировать" приоритет, учитывая высоту и ширину. По этому свойству и будем сортировать список.

 

как вариант я сделал это свойство = высота в третьей степени (чтобы придать вес) + ширина. Таким образом будет сначала учитываться высота а потом, как менее приоритетно свойство - ширина.

 

как вариант вместо третьй степени можно просто сдлать что-то типа: высота*10000+ширина

 

Потом соединяется в один список все списки (или только типоразмеры и свойство приоритета) и сортируем этот список по свойству приоритета.


Alexey Lobanov / Алексей Лобанов
Revit Architecture Certified Professional | Autodesk Certified Instructor | Autodesk Expert Elite
PRORUBIM | YouTube channel | LinkedIn profile

Сообщение 3 из 9
Dronov.Dmitry
в ответ: alexey.lobanov

да уж. мудрено.
а скажи, есть в динамо нод "сортировка по двум ключам"?
потому что в питоне нечто подобное есть при сортировке тюплов и дикшнарей, которые кажись в динамопитоне не поддерживаются.
-
с приездом)
Сообщение 4 из 9
alexey.lobanov
в ответ: Dronov.Dmitry

Спасибо!

 

В динамо боюсь что нет.

 

в питоне функция сортировки универсальная и может сортировать помойму все что угодно.

 

По нескольким полям можно примерно следующим образом

l.sort(key=lambda x: (x[0], int(x[1])))


Alexey Lobanov / Алексей Лобанов
Revit Architecture Certified Professional | Autodesk Certified Instructor | Autodesk Expert Elite
PRORUBIM | YouTube channel | LinkedIn profile

Сообщение 5 из 9
Dronov.Dmitry
в ответ: alexey.lobanov

отлично. спасибо. буду разбираться с лямбдой. 🙂 

Сообщение 6 из 9
Dronov.Dmitry
в ответ: alexey.lobanov

Но я имел в виду что питон по идее сам способен сортировать по двум параметрам 
http://stackoverflow.com/questions/4233476/sort-a-list-by-multiple-attributes

 

но как в динамо подгрузить operator.itemgetter я так и не понял

Сообщение 7 из 9
Dronov.Dmitry
в ответ: alexey.lobanov

да. все отлично работает: 

спасибо, Леша.

я неделю дня пробился так и не смог это решить а тут такое изящное решение ))) 

-

Dynamo.jpg

Сообщение 8 из 9
Dronov.Dmitry
в ответ: alexey.lobanov

Ну хорошо.
это решение работает.
А как быть если один параметр текстовый?
Например если нужно отсортировать перемычки вначале по этажам а потом ширинам....

Сообщение 9 из 9
Dronov.Dmitry
в ответ: Dronov.Dmitry

Хотя в принципе с уровнем плохой пример....
у него можно в питоне отрезать стринговую часть а оставшиеся цифры перевести в стринг....
-
А хотя... и любую алфавитную сортировку можно сюда закрутить... присвоив порядок вместо отсортированного алфавита..
вссе.. спасибо.. :)) вопрос исчерпан

Не нашли то, что искали? Задайте вопросы в сообществе или поделитесь своими знаниями.

Новая тема  

Autodesk Design & Make Report