Страницы: 1
RSS
Как выгрузить массив после сортировки ссылкой?
 
Использую "System.Collections.ArrayList" для сортировки большого массива.
При заполнение обьекта в цикле передается поэлементно входящий массив, указаный в параметре.
Затем сортировка.
А вот выгрузка отсортированного массива обратно во входящий массив через цикл занимает много времени.
Как можно результат сортировки передать напрямую из обьекта в виде ссылки?
Как в виде двух массивов: arrData=arr
Код
Set arr = CreateObject("System.Collections.ArrayList")

For Each v In arrData
    arr.Add v(i)
i=i+1
Next

arr.Sort
Изменено: User4451 - 01.04.2021 13:39:05
 
Код
Set arr = CreateObject("System.Collections.ArrayList")
 
For Each v In arrData
    arr.Add v
Next
 
arr.Sort

arrData=arr.toArray
https://www.snb-vba.eu/VBA_Arraylist_en.html
Изменено: Marat Ta - 13.04.2021 14:02:35
 
Цитата
User4451: Использую "System.Collections.ArrayList" для сортировки большого массива
насколько я знаю, это, мягко говоря, не самый быстрый способ
Попробуйте этот - он очень крутой
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Jack Famous, что то и мне уже стало интересно. Можете сравнительный тест по скорости на 1 млн. строк по 32 символа сделать?
Изменено: Marat Ta - 13.04.2021 15:41:10
 
Цитата
Marat Ta написал:
стало интересно
а что препятствует удовлетворению интереса?
т.е. интересно вам, а сравнивать должен Jack Famous,
удобный подход, беру на вооружение
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Ігор Гончаренко, ага  :D  :D  :D
Цитата
Marat Ta: Можете сравнительный тест по скорости на 1 млн. строк по 32 символа сделать?
могу - спасибо, что интересуетесь моими способностями  :D
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Jack Famous, Впечатлило.
Очень похоже на известную QuickSort, но работает быстрее.
Изменено: Marat Ta - 13.04.2021 16:51:39
 
У меня одинаково
System.Collections.ArrayList - 5,86328125
Jack forum - 5,84765625
Изменено: New - 13.04.2021 16:54:54
 
Цитата
Marat Ta: Впечатлило
не знаю, где вы взяли тестовый стенд, но там сравнение, мягко говоря, не очень
Цитата
Marat Ta: Очень похоже на известную QuickSort, но работает быстрее
об этом прямо написано по ссылке, которая размещена вверху кода, который я прислал. Это рекурсивный квик, улучшенный и вылизанный

Цитата
New: У меня одинаково
не стоит доверять этому тесту  :D
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
New, у меня оперативка RAM 128 гб.
Может это играет роль? Рекурсия и обьем RAM вроде как то связаны.
Изменено: Marat Ta - 13.04.2021 17:12:56
 
Нашёл источник тестового стенда
Лично у меня на реальных данных даже проверить не получилось - на рабочем компе не подключается ни ранним, ни поздним связыванием (точнее ранним подключает, но в цикле заполнения вываливается на первом же значении ХЗ почему), но одно я знаю точно (ещё из прошлых долгих тестов) - эта штука фуфломёт ещё тот  :D

В файле "тесты" почти все выполняются, но доверия к ним нет, а разбираться причин не вижу
Изменено: Jack Famous - 13.04.2021 17:17:37
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Jack Famous, тестовый стенд из книги John Walkenbach "Excel 2007 Power Programming with VBA"
Ну этот у вас должен 100% работать.
Изменено: Marat Ta - 13.04.2021 17:27:01
 
Marat Ta, спасибо, но не надо))
Сортировка - это большая тема, чтобы вот такими "нахрапами" готовых (не вами сделанных) тестов что-то показывать и/или доказывать
Когда хоть немного "окунётесь" в нюансы сортировки, то поймёте, о чём я говорю
Пока лишь скажу, что самый лучший для себя сортер (который я лично многократно тестил) я показал
Изменено: Jack Famous - 13.04.2021 17:57:11
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Скачал файл из сообщения 7. Машина у меня старая Excel 2010 System.Collections.ArrayList  не прошел ошибка. Вот результаты
Изменено: Евгений Смирнов - 13.04.2021 18:11:05
 
Евгений Смирнов, у меня mscorlib.dll есть, но тоже глухо  :D
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Евгений Смирнов,  пакет Net Framework установлен?
У вас случайно не Windows XP?
Изменено: Marat Ta - 13.04.2021 19:51:54
 
Marat Ta
Цитата
У вас случайно не Windows XP?
Да XP SP3 ноут Samsung R-040 1Г оперативки.старье короче, но мне 1000000 строк не надо обрабатывать, то что мне нужно он делает.
Net Framework посмотрел нет. Я не крутой спец, не знаю зачем он нужен. Комп и без него работает. Вообще я не сторонник всего нового.Не всегда новое лучше старого.Excel у меня 2 (2002г и 2010г) Пока предпочитаю старый, особенно когда пишу макросы.
 
 
"System.Collections.ArrayList" работает только при наличии Net Framework.
Оффтоп:
По вопросу - для чего он еще нужен - например, последние версии антивируса Касперского вы без него не установите.
Изменено: Marat Ta - 14.04.2021 06:54:42
 
Marat Ta А у меня и антивируса нет зачем он нужен? Дополнительный тормоз.
Изменено: Евгений Смирнов - 14.04.2021 07:01:19
 
Евгений Смирнов, я поднял этот вопрос не по этому поводу.
Тестовый файл работает у всех, кроме Jack Famous и вас.
У вас выяснили причину. Значит проблемы с этим тестом возможно и нет.
 
Цитата
Marat Ta: Тестовый файл работает у всех, кроме Jack Famous и вас
вы снова не читаете:
Цитата
Jack Famous: Лично у меня на реальных данных даже проверить не получилось - на рабочем компе не подключается … В файле "тесты" почти все выполняются
с файлом проблем нет, не выполняются макросы, которые НЕ ArrayList и на них ну прям совсем плевать в данном случае. ArrayList запускается, но сравнение мне не понравилось
Подробно
Сегодня время я нашёл, но ничего не изменилось - ошибка на месте, причина непонятна. Раннее подключение есть, но ошибка такая же, как при позднем
Кто хочет/может - увеличьте количество элементов в полях Short и Long (раскопировав то, что есть или своими данными), раскомментируйте блоки кода и запустите тестер (квик сортирует 100 тыс элементов, как в примере 0,3 сек)
Код и скрины
P.S.: на кой хрен Marat Ta прислал файл "sorting demo", в котором вообще ArrayList нет, я не знаю  :D
P.P.S.: Ох и наоффтопили мы тут  :oops:
Изменено: Jack Famous - 14.04.2021 10:29:35
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
Страницы: 1
Наверх