|
Есть ли число в списке чисел (то же что IN(...), только в коде)
|
|||
---|---|---|---|
#18+
Вакшуль Сергей, Здравствуйте, Сергей! Что-то я тоже засомневался, насколько ваш тестовый стенд корректен. Добавил свою идею (по аналогии), и вот что получилось :) Код: vbnet 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
05.11.2017, 23:06 |
|
Есть ли число в списке чисел (то же что IN(...), только в коде)
|
|||
---|---|---|---|
#18+
guest_rusimport, Добрый вечер :) Код: vbnet 1. 2. 3. 4. 5.
не, это же просто считывание n-ого элемента массива. А поиск где? :) вот здесь вот: Код: vbnet 1. 2. 3. 4. 5.
было 10000 операций поиска. 10000 раз выполнялась функция InArr. А внутри каждого вызова функции, в зависимости от положения элемента в массиве выполнялось от 1 до 10000 переборов. Т.е. у вас на порядки меньше циклов. И самое главное, где поиск? Ведь как бы предполагается, что на вход идет нечто(строка, массив, коллекция) и нужно узнать, содержит ли это "нечно" нужный элемент. Если вы смотрите вот сюда: Код: vbnet 1. 2. 3.
и думаете, что это я так же как и вы просто обращаюсь к элементу коллекции по номеру, то это не так. Я тут обращаюсь не по номеру, а по ключу. Если бы я обращался по номеру, то это бы выглядело так: idsList(i). А у меня вот так: idsList(CStr(i)) Выше в обсуждении я писал:Вакшуль СергейЕсли массивы не нравятся, попробуйте коллекции: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
Обратите внимание, что ключ строковый. Имя ключа равно значению. Т.е. когда надо узнать, а есть ли в коллекции элемент, значение которого равно 11, то нужно просто обратится по имени ключа "11". С массивом так сделать нельзя. В этом весь фокус. Тут смысл в том, что обращаясь таким образом к коллекции, вам не нужно лопатить в цикле по всем ее элементам, как в случае с функцией InArr. За вас это сделает Access. Он тоже будет лопатить (просто это от нас скрыто). Но он это делает быстрее, чем аналогичный код пользователя в стандартном модуле. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2017, 00:52 |
|
Есть ли число в списке чисел (то же что IN(...), только в коде)
|
|||
---|---|---|---|
#18+
еще раз повторюсь:Вакшуль СергейКоллекция быстрее. Но все, конечно, определяется контекстом.Например, если значения в списке значений на входе могут повторятся, то примененный подход с коллекциями, где значение элемента соответствует названию ключа, уже не применишь, т.к. имя ключа должно быть уникальным. Да и наполнение коллекций, как совершенно справедливо заметил Андрей, требует времени. Если наполнение коллекции одно, а считываний много, то выигрыш есть. А если одно наполнение и одно считывание, то выигрыша не будет. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2017, 01:07 |
|
Есть ли число в списке чисел (то же что IN(...), только в коде)
|
|||
---|---|---|---|
#18+
Еще вариант для Акса с непосредственным использованием IN: If EVal(Число & " IN (" & СписокЗначений & ")") Then Для вашего примера EVal(7 & " IN (3,18,15,389,45)") вернет 0 (False), а для 18 вернет -1 (True) На скорость не проверял... ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2017, 10:53 |
|
Есть ли число в списке чисел (то же что IN(...), только в коде)
|
|||
---|---|---|---|
#18+
Вакшуль Сергей, Да, Сергей, конечно же , вы правы. А по поводу своего сообщения лишь могу привести анекдот :) Мужик просыпается каждый раз утром с чувством, что во сне он сделал какое-то архиважное открытие. Но не помнит всякий раз какое. И он решает как-нибудь зафиксировать мысль, приходящую во сне. Заводит будильник на три часа ночи и кладет рядом на тумбочку лист бумаги с ручкой, просит жену растолкать его, когда зазвонит будильник. Ночью его, как просил, будит жена, он быстренько записывает что-то на листке бумаги и отрубается снова до утра. Утром просыпается, вспоминает, что ночью записал важную мысль. Радостный берет листок бумаги с тумбочки и читает - "Яичницу надо солить!!!" ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2017, 11:08 |
|
Есть ли число в списке чисел (то же что IN(...), только в коде)
|
|||
---|---|---|---|
#18+
Настаев, Хоть в VBA нет IN, зато есть "SELECT CASE" (как Вы и показали), а ещё EVAL (но это не функция VBA, а именно функция VBA для Access). Что-то вроде этого Код: vbnet 1.
Чем не вариант? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.11.2017, 14:19 |
|
Есть ли число в списке чисел (то же что IN(...), только в коде)
|
|||
---|---|---|---|
#18+
Анатолий ( Киев ), Сорри, не увидел. Лень было до конца дочитать. :) ... |
|||
:
Нравится:
Не нравится:
|
|||
07.11.2017, 14:25 |
|
Есть ли число в списке чисел (то же что IN(...), только в коде)
|
|||
---|---|---|---|
#18+
studierenНастаев, Хоть в VBA нет IN, зато есть "SELECT CASE" (как Вы и показали), а ещё EVAL (но это не функция VBA, а именно функция VBA для Access). Что-то вроде этого Код: vbnet 1.
Чем не вариант? Вариант что надо. Удобнее, чем Select case ... |
|||
:
Нравится:
Не нравится:
|
|||
07.11.2017, 16:16 |
|
|
start [/forum/topic.php?fid=45&msg=39548279&tid=1611932]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
36ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
40ms |
get tp. blocked users: |
1ms |
others: | 289ms |
total: | 404ms |
0 / 0 |