
Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
|
17.11.2009, 14:18
|
|||
|---|---|---|---|
Удаление одинаковых записей из массива |
|||
|
#18+
Допустим имеется массив Код: plaintext 1. 2. 3. Т.е. необходимо чтобы новый массив был Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
17.11.2009, 14:43
|
|||
|---|---|---|---|
|
|||
Удаление одинаковых записей из массива |
|||
|
#18+
можно переносить по одному значению из старого в новый массив, при этом проверять нет ли такого значения в новом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
17.11.2009, 14:47
|
|||
|---|---|---|---|
Удаление одинаковых записей из массива |
|||
|
#18+
А как сделать поиск значения в массиве? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
17.11.2009, 15:18
|
|||
|---|---|---|---|
Удаление одинаковых записей из массива |
|||
|
#18+
В этом варианте есть один нюанс, верхняя граница массива aNew будет на 1 элемент больше, чем есть фактически. Наверняка это легко обходится, просто сейчас нет времени думать :) Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
19.11.2009, 11:27
|
|||
|---|---|---|---|
|
|||
Удаление одинаковых записей из массива |
|||
|
#18+
MaximuS_G, круто, конечно, но лучше, всё таки, так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
19.11.2009, 11:36
|
|||
|---|---|---|---|
|
|||
Удаление одинаковых записей из массива |
|||
|
#18+
A-NikMaximuS_G, круто, конечно, но лучше, всё таки, так: Да, у Вас намного быстрее и интереснее, но не сказал бы что правильнее. Мне кажется использование On Error Resume Next не совсем правильно. Всего лишь мое мнение :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
19.11.2009, 13:26
|
|||
|---|---|---|---|
Удаление одинаковых записей из массива |
|||
|
#18+
Еще вариант Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
19.11.2009, 16:53
|
|||
|---|---|---|---|
|
|||
Удаление одинаковых записей из массива |
|||
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
20.11.2009, 00:30
|
|||
|---|---|---|---|
|
|||
Удаление одинаковых записей из массива |
|||
|
#18+
Спасибо, хорошее сравнение. И коды интересные, пригодятся. Я тут на досуге погонял на реальных 11000+ значениях ( с пустыми ячейками в конце диапазона), из которых 2999 уникальных значащих + 1 уникальный пустой элемент (т.е. общее количество элементов массива 3000). Полученный массив выгружал рядом в столбец B. Коды чуть подправил, a на i поменял, Dictionary без On Error Resume Next не хотел работать... Код Deggassad единственный игнорирует пробелы - у меня в списке затесались две пустые ячейки, так вот код Deggassad их пропустил, но зато одну пустую ячейку вставил в конце (это просто пустой элемент в конце массива, после "|"), остальные варианты взяли как уникальное одну пустоту и поместили её в порядке очереди. Немного это сбивало с толку, пока нашёл причину - количество элементов вроде одинаковое, а количество заполненных ячеек разное... Так что вот, в коде Deggassad пустоту в конце выкинуть легко (в примере выкинул) и в массиве её уже нет, в других вариантах она в массиве так и сидит, надо учитывать. По времени: Degassad 4,140125 For Each 1,218250 For i 1,733500 Dictionary 1,140375 Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
20.11.2009, 09:37
|
|||
|---|---|---|---|
|
|||
Удаление одинаковых записей из массива |
|||
|
#18+
Код Deggassad единственный игнорирует пробелы - как оказалось, не совсем - если первая ячейка диапазона пустая, то она заносится в массив пустой. Но это конечно можно обойти дополнительной проверкой перед занесением в str. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
20.11.2009, 10:49
|
|||
|---|---|---|---|
|
|||
Удаление одинаковых записей из массива |
|||
|
#18+
Hugo121, у меня от шока нет слов ! Это ж надо было так затормозить работу циклов ! 1. Что вам мешало оставить вывод значений массива однима махом, а не в цикле? Сделать это можно либо через транспонирование, как в наших с Деггасадом примерах, либо черз объявление двумерного массива, у которого второе измерение равно 1. Вот пример для варианта с коллекцией: Код: plaintext 1. 2. 3. 4. 5. 6. 2. Вариант Деггасада вы тоже затормозили, вставив проверку в тело цикла. От пустого последнего/первого элемента можно избавиться так: Код: plaintext 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
20.11.2009, 10:57
|
|||
|---|---|---|---|
Удаление одинаковых записей из массива |
|||
|
#18+
Я уже понял, что мой вариант не самый быстрый по скорости, но вдруг кому то нравится, так вот смотрите там была ошибка в искомом параметре, сразу в глаза не бросилось Вот исправленный код. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
20.11.2009, 11:15
|
|||
|---|---|---|---|
|
|||
Удаление одинаковых записей из массива |
|||
|
#18+
Зато он оригинальный :)... Код от A-Nik однозначно будет быстрее, так как он использует коллекции, а коллекции в разы быстрее обрабатываются чем массивы типа Array. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
20.11.2009, 11:23
|
|||
|---|---|---|---|
|
|||
Удаление одинаковых записей из массива |
|||
|
#18+
Да я тоже только учусь :) Понимаю, что не быстрый вывод, ну так вот Вы показали, как лучше, да и тема развилась в хороший учебный пример :) Мне бы год назад это почитать, когда я только подступался к массивам... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
20.11.2009, 11:33
|
|||
|---|---|---|---|
|
|||
Удаление одинаковых записей из массива |
|||
|
#18+
mКод от A-Nik однозначно будет быстрее, так как он использует коллекции, а коллекции в разы быстрее обрабатываются чем массивы типа Array. Очень интересное заключение.... A можно поинтересоваться почему так ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
20.11.2009, 12:09
|
|||
|---|---|---|---|
Удаление одинаковых записей из массива |
|||
|
#18+
Немного изменил код, сделал его более красивым (на мой взгляд), большей скорости выдавить не удалось Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
20.11.2009, 15:29
|
|||
|---|---|---|---|
Удаление одинаковых записей из массива |
|||
|
#18+
Честно скажу - читал топик "по-диагонали". Вроде начинали с массив -> массив, а пришли к копированию уникальных значений из A1:A10000 в B1 ? Тогда про этот вариант, вроде бы еще не говорили? Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
20.11.2009, 15:43
|
|||
|---|---|---|---|
|
|||
Удаление одинаковых записей из массива |
|||
|
#18+
про этот вариант - быстро, стандартно, но почему не работает, если А1 пустая? И место ему расчистить нужно... Я присматриваюсь, что можно в работе использовать, на разношёрстных данных - фильтр труднее прикрутить - следи за А1 всегда... да и на другой лист не выгрузишь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
20.11.2009, 16:03
|
|||
|---|---|---|---|
|
|||
Удаление одинаковых записей из массива |
|||
|
#18+
Hugo121... да и на другой лист не выгрузишь. Кто сказал? Всё прекрасно выгружается Код: plaintext 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
20.11.2009, 16:11
|
|||
|---|---|---|---|
Удаление одинаковых записей из массива |
|||
|
#18+
qwrqwrЧестно скажу - читал топик "по-диагонали". Вроде начинали с массив -> массив, а пришли к копированию уникальных значений из A1:A10000 в B1 ? Тогда про этот вариант, вроде бы еще не говорили? Код: plaintext Я первым делом подумал об этом, но речь действительно была о массивах. просто для удобства ввода и вывода используются ячейки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
20.11.2009, 16:11
|
|||
|---|---|---|---|
|
|||
Удаление одинаковых записей из массива |
|||
|
#18+
авторОчень интересное заключение.... A можно поинтересоваться почему так ? А Вы попробуйте? Внесите 10000 значений в массив и в коллекцию ? Где быстрее? Если не ошибаюсь, разница в скорости обработки существует из-за разницы в методах выделения оперативной памяти... Вот тоже разница описана немного: http://findarticles.com/p/articles/mi_m0BLL/is_8_21/ai_n9537860/A collection differs from an array in that it isn't dimensioned, it is one-based, and it can hold multiple data types...There are two main reasons to choose a collection over an array. The first is that you can add as many items as you need without worrying about a limit. The second is data access speed. When finding an item in the collection, the program doesn't have to iterate through each item. If you use the optional keyword when adding items, the program can go directly to the desired item... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
20.11.2009, 16:22
|
|||
|---|---|---|---|
Удаление одинаковых записей из массива |
|||
|
#18+
Deggasad Я первым делом подумал об этом, но речь действительно была о массивах. просто для удобства ввода и вывода используются ячейки.:) Ну началось-то все как: ТСДопустим имеется массивОн (массив) ведь не из воздуха берется? Я так понимаю - это ведь обычно данные либо из диапазона ячеек, либо Селект из внешнего источника. В первом случае достаточно .AdvancedFilter в свободный столбец, а во втором просто DISTINCT в запросе указать. А обработка некоего сферического массива в вакууме в VBA - только поэлементно, это да. Единственное что есть для работы с массивом "разом" - текстовые функции Split/Join/Filter, но на текстовых операциях больше времени потеряешь. Все исключительно IMHO. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
20.11.2009, 16:56
|
|||
|---|---|---|---|
|
|||
Удаление одинаковых записей из массива |
|||
|
#18+
mА Вы попробуйте? Внесите 10000 значений в массив и в коллекцию ? Где быстрее?А вы самы то пробовали ? Вот, специально для вас тест: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. На таком диапазоне у меня в массив заносится в 5 раз быстрее, чем в коллекцию! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
20.11.2009, 17:05
|
|||
|---|---|---|---|
|
|||
Удаление одинаковых записей из массива |
|||
|
#18+
Пардон, для варианта с массивом строку "Arr(i) = a" надо заменить на "Arr(i) = M(i, 1)". Это я перешёл от For each a In M на For i = 1 to UBound(M) и забыл подправить. В любом случае с массивом работает заметно быстрее! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|

start [/forum/topic.php?fid=61&mobile=1&tid=2178811]: |
0ms |
get settings: |
10ms |
get forum list: |
21ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
202ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
82ms |
get tp. blocked users: |
1ms |
| others: | 251ms |
| total: | 591ms |

| 0 / 0 |
