
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
что такое мт4 не знаю, оно у меня даже запускаться не захотело на win10, думаю что и слава богу
До кучи подкрутил.
Пришлось загнать ArrayCopy т.к. на MQL5 ругался что массив статичный.

Ну если уж пошла такая пьянка-соревновалка по скорости, то предложу и свой вариант...
Ваш вариант действительно самый быстрый, но он содержит ошибку: если все элементы массива равны фильтру, Ваша функция вылетает за пределы массива.
Предложу свой вариант, он немного уступает Вашему в скорости:
2018.11.13 17:16:38.618 massiv v1 (EURUSD,M1) test мой=1512090
2018.11.13 17:16:40.083 massiv v1 (EURUSD,M1) test чужой=1464941
Вы уже несколько лет задаете подобные вопросы. Многому научились? Извините, но видно что Вы как ковырялись на уровне байтов и элементарных массивов, так и остались там.
Сам вопрос сформулирован неверно. Задача не в удалении повторяющихся значений (задача уровня ОГЭ) а в нечто большем, по всей видимости актуализируете список валидных элементов. Раз так, то и вопрос совсем иначе должен звучать. Вы же запутываете и вводите в заблуждение участников и прежде всего себя: навязывайте участникам неверное решение в принципе и просите его сделать эффективным.
Я не занимаюсь программированием ради программирования, цели стать мега программистом и умничать на форумах нет.
Что Вам не понятно в вопросе: Очистить массив от заданных элементов ?
Ваш вариант действительно самый быстрый, но он содержит ошибку: если все элементы массива равны фильтру, Ваша функция вылетает за пределы массива.
Предложу свой вариант, он немного уступает Вашему в скорости:
2018.11.13 17:16:38.618 massiv v1 (EURUSD,M1) test мой=1512090
2018.11.13 17:16:40.083 massiv v1 (EURUSD,M1) test чужой=1464941
Да, спасибо. Поправил.
Только у Вас где-то тоже ошибка, т.к. контрольная сумма не совпадает, т.к. теряет один элемент где-то. Не разбирался где.
Подправил, убрав лишние проходы
В обоих случаях каждый элемент перетаскивается максимум один раз.
Да, извините, действительно, один раз. Надеялся, кто-нибудь заинтересуется подходом из СУБД и проверит, не дождался. Пришлось самому.
Вставил в Вашу проверялку ArrayDeleteValue.mq5, вышло хуже, чем у Вас, раза в два. Подумал о причинах и поправил в ней две строчки, чтобы удалялась треть элементов, а не 0.1%.
Вышло так:
2018.11.13 19:45:22.148 Del (GBPUSD.m,H1) вариант Pastushak: Контрольная сумма = 333586; элементов - 667421; время выполнения = 108521 микросекунд
2018.11.13 19:45:22.148 Del (GBPUSD.m,H1) вариант Korotky: Контрольная сумма = 333586; элементов - 667421; время выполнения = 5525 микросекунд
2018.11.13 19:45:22.148 Del (GBPUSD.m,H1) вариант Fedoseev: Контрольная сумма = 333586; элементов - 667421; время выполнения = 4879 микросекунд
2018.11.13 19:45:22.164 Del (GBPUSD.m,H1) вариант Semko: Контрольная сумма = 333586; элементов - 667421; время выполнения = 14479 микросекунд
2018.11.13 19:45:22.179 Del (GBPUSD.m,H1) вариант Pavlov: Контрольная сумма = 998744; элементов - 667421; время выполнения = 0 микросекунд
2018.11.13 19:45:22.179 Del (GBPUSD.m,H1) вариант Nikitin: Контрольная сумма = 333586; элементов - 667421; время выполнения = 5759 микросекунд
2018.11.13 19:45:22.179 Del (GBPUSD.m,H1) вариант Vladimir: Контрольная сумма = 333586; элементов - 667421; время выполнения = 1542 микросекунд
Вариант Pavlov давал ошибку, пришлось закомментировать.
Вывод: вычисление адресов в массиве с произвольным расстоянием между их номерами все же хуже, чем обработка элементов подряд, при заданном шаге, тем более шаге 1, компилятор может ее оптимизировать.
P.S. В компиляторах от Borland для Паскаля и Delphi делается так, что во время исполнения цикла переменная цикла не имеет значения (в памяти), она помещается куда-то в регистры процессора.
Да, извините, действительно, один раз. Надеялся, кто-нибудь заинтересуется подходом из СУБД и проверит, не дождался. Пришлось самому.
Вставил в Вашу проверялку ArrayDeleteValue.mq5, вышло хуже, чем у Вас, раза в два. Подумал о причинах и поправил в ней две строчки, чтобы удалялась треть элементов, а не 0.1%.
Вышло так:
2018.11.13 19:45:22.148 Del (GBPUSD.m,H1) вариант Pastushak: Контрольная сумма = 333586; элементов - 667421; время выполнения = 108521 микросекунд
2018.11.13 19:45:22.148 Del (GBPUSD.m,H1) вариант Korotky: Контрольная сумма = 333586; элементов - 667421; время выполнения = 5525 микросекунд
2018.11.13 19:45:22.148 Del (GBPUSD.m,H1) вариант Fedoseev: Контрольная сумма = 333586; элементов - 667421; время выполнения = 4879 микросекунд
2018.11.13 19:45:22.164 Del (GBPUSD.m,H1) вариант Semko: Контрольная сумма = 333586; элементов - 667421; время выполнения = 14479 микросекунд
2018.11.13 19:45:22.179 Del (GBPUSD.m,H1) вариант Pavlov: Контрольная сумма = 998744; элементов - 667421; время выполнения = 0 микросекунд
2018.11.13 19:45:22.179 Del (GBPUSD.m,H1) вариант Nikitin: Контрольная сумма = 333586; элементов - 667421; время выполнения = 5759 микросекунд
2018.11.13 19:45:22.179 Del (GBPUSD.m,H1) вариант Vladimir: Контрольная сумма = 333586; элементов - 667421; время выполнения = 1542 микросекунд
Вариант Pavlov давал ошибку, пришлось закомментировать.
Вывод: вычисление адресов в массиве с произвольным расстоянием между их номерами все же хуже, чем обработка элементов подряд, при заданном шаге, тем более шаге 1, компилятор может ее оптимизировать.
P.S. В компиляторах от Borland для Паскаля и Delphi делается так, что во время исполнения цикла переменная цикла не имеет значения (в памяти), она помещается куда-то в регистры процессора.
Вариант Павлова исправил.
Странные у вас значения получились. Может Вы скрипт запускали после профилирования или отладчика, не перекомпилировав код?
У меня так получается:
Причем в Вашем варианте выдает неправильную контрольную сумму. Да и вообще создание дополнительного массива не дает никакой выгоды, а наоборот тормозит процесс, да еще и дополнительные ресурсы ест.
Только у меня это происходит блоками с помощью ArrayCopy, поэтому выйгрыш в скорости и существует.