|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
Поиск в этой теме |
|
||||
Регистрация: 10.08.2013
Сообщений: 11,046
|
Цитата:
|
|||
|
||||
КЖ; C# Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,589
|
Цитата:
LINQ - это библиотека расширяющая стандартный синтаксис языка платформы .NET (VB C# C++ ...) , а Sort - один из возможных методов этого языка. И по поводу того, что там можно сделать одной строкой... Например вот одна строка из проекта написанного на C# (для удобства выполнены переносы): Код:
В XML документе, пройтись по всем нодам, включая ВСЕ вложения (не зависимо от уровня вложенности), с именем "Property", и если у ноды есть атрибут "name" и это атрибут реально есть и его значение равно "Creation Time", то посмотреть, есть ли у этой ноды еще и атрибут "category" и если его нет, то взять у ноды ВСЕ атрибуты с именем "value" и вернуть строковое значение первого элемента в полученном списке. При этом, как видно из синтаксиса, вполне себе можно использовать не строгие равенства, фильтровать и сортировать как угодно. Это просто пример. Решение этой же задачи средствами обычного процедурного языка - использование циклов, рекурсий, пересоздания множества объектов и прочие прелести. Резюмируя, к сожалению, Вы не вполне знаете то, о чем пишите. Последний раз редактировалось Boxa, 28.02.2019 в 12:08. |
|||
|
||||
Регистрация: 10.08.2013
Сообщений: 11,046
|
Цитата:
А если так мило сердцу именно сортировка, то простейший вариант (при оси X по горизонтали слева направо): Цитата:
Код:
Код:
Код:
Код:
|
|||
|
||||
Регистрация: 28.01.2019
Сообщений: 62
|
Цитата:
Конечно лучше использовать готовое решение, тем более если оно работает быстрее, чтобы велосипеды не изобретать, но своё зачастую просто понятней и пока разберешься в существующих решениях иногда быстрее самому написать. Последний раз редактировалось Кудахтыч, 28.02.2019 в 12:32. |
|||
|
||||
Регистрация: 28.01.2019
Сообщений: 62
|
Цитата:
Код:
Последний раз редактировалось Кудахтыч, 28.02.2019 в 12:46. |
|||
|
||||
Регистрация: 10.08.2013
Сообщений: 11,046
|
А функция
Еще сколько занимает?) А учитывая, что скорость написания кода даже в бесплатных студия раза в 2..3 раза быстрее, чем в VBA, и многое есть в готовом виде во фреймворке (если читать справку, конечно, а не "трудолюбиво" самим половину функций писать)... ----- добавлено через ~2 мин. ----- Мой пример будет работать быстрее, потому что это .Net. На VBA скорость работы кода зависит даже от длины названий переменных и функций в коде, как как интерпретатор) |
|||
|
||||
КЖ; C# Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,589
|
Сергей812, При всем моем уважении, но всю портянку кода можно было заменить на одну строчку...
Код:
Кудахтыч, я ВАС услышал. "Я знаю как работать с лопатой, поэтому лопата - лучший инструмент. Все можно сделать лопатой, не надо нам трактора, он ломается, лопата - надежность и гибкость." Больше пояснений не требуется. |
|||
|
||||
Регистрация: 10.08.2013
Сообщений: 11,046
|
|
|||
|
||||
Регистрация: 28.01.2019
Сообщений: 62
|
Цитата:
Код:
SortMetodSliyan - соответственно функция самой быстрой сортировки методом слияния. Вообще сортировки после перехода на метод слияния во время исполнения моих плагинов сейчас занимают не так много процессорного времени(может всего несколько процентов) по сравнению с получением данных из существующих элементов чертежа, изменение свойств существующих и отрисовка новых элементов на чертеже. ----- добавлено через ~5 мин. ----- Цитата:
|
|||
|
||||
Регистрация: 10.08.2013
Сообщений: 11,046
|
Ну если выкинуть комментарии из моего примера, то там будет меньше 30 строк) А если на LINQ, как показал выше Boxa - VBA грустно смотрит со стороны. Ну это лирика.
А теперь перейдем к более прозаическим вещам с точки зрения быстродействия и затрат. В вашей универсальной функции: Передается аргумент типа variant. А это дополнительные затраты ресурсов при хранении и обработке каждого значения из массива (приведение типа, распаковка, упаковка). Что за несколько десятков лет в VBA не смогли сделать обобщенные типы T, как в .Net - печально и предсказуемо. Развитие языка давно остановилось. И пытаться писать на нем универсальные методы - можно, конечно, но смешно при этом говорить о быстродействии. |
|||
|
||||
Регистрация: 28.01.2019
Сообщений: 62
|
Цитата:
Да я знаю что variant самый затратный (Объём выделяемой памяти: 16 байт + 1 байт на каждый символ), но в рамках моих даже самых крупных задач это ничтожные потери Даже если элементов массива variant будет 10 000 000 штук - чего у меня не было никогда в самых крупных объектах, максимум пару десятков тысяч, не скупимся и возьмем к примеру 128 байт на элемент, итого 10000000*128/2^30 = 1,19ГБ ОЗУ - что не так уж много по сегодняшним меркам, мы ведь не живём в те времена (90-е) когда Билл Гейтс предрекал что 640 килобайт ОЗУ всегда будет достаточно для домашнего компьютера. Сейчас у меня в компе 32Гб ОЗУ, до этого было 64Гб купленные в 2016-м году, когда цены на ОЗУ выросли в 2 раза в 2018-м я просто продал лишние 32Гб из-за ненадобности в 1,5раза дороже чем купил. Ну вот я хочу поржать немного, доделать начатое, потом на С++, кстати через несколько лет вроде как Автодеск откажется от VBA и заменит его на VB.Net. |
|||
|
||||
Регистрация: 10.08.2013
Сообщений: 11,046
|
Цитата:
Offtop: Цитата:
----- добавлено через ~7 мин. ----- а еще внутри функции выделяете память под три массива типа variant той же размерности, что и входной. |
|||
|
||||
Регистрация: 18.12.2010
Сообщений: 5,057
|
Цитата:
|
|||
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Какой язык перспективен для инженера-конструктора с условием | The_Mercy_Seat | Программирование | 705 | 17.03.2021 14:19 |