Сравнение массивов

 

Доброго.

Есть double array 1 и double array 2. Необходимо выбрать все значения второго массива, совпадающие со значениями первого - поместить в 3 массив. 

 В документации не удалось найти.

И еще вопрос, счёт в массиве и буфере, куда копируем цены баров, начинается с 0? 

Документация по MQL5: Операции с массивами
Документация по MQL5: Операции с массивами
  • www.mql5.com
Операции с массивами - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Gregory Kovalenko:

Доброго.

Есть double array 1 и double array 2. Необходимо выбрать все значения второго массива, совпадающие со значениями первого - поместить в 3 массив. 

 В документации не удалось найти.

И еще вопрос, счёт в массиве и буфере, куда копируем цены баров, начинается с 0? 

Тупой перебор во вложенных циклах. Возможно, предварительная сортировка через ArraySort ускорит процесс. Может быть, HashTable для такой задачи будет быстрее.
 

Первый массив отсортировать.

Второй в цикле перебирать, и делать бинарный поиск в первом массиве. Если есть совпадение - пишем в третий.

 
Интересно, как аналогичная операция работает в базах данных? Пускай, для примера, две таблицы(по аналогии, два массива) проиндексированы. Интересует, не как сделать запрос, а как это происходит в БД при использовании наиболее эффективного запроса.
Тема немного схожая).
 
Gregory Kovalenko:

И еще вопрос, счёт в массиве и буфере, куда копируем цены баров, начинается с 0? 

Да, с нуля. Это, по моему, во всех языках программирования так. В большинстве так уж точно ))
 
Gregory Kovalenko:

Доброго.

Есть double array 1 и double array 2. Необходимо выбрать все значения второго массива, совпадающие со значениями первого - поместить в 3 массив. 

 В документации не удалось найти.

И еще вопрос, счёт в массиве и буфере, куда копируем цены баров, начинается с 0? 

Эта задача не имеет эффективного решения для массивов. Правильно указали что использовать надо HashSet или словари. В этом случае как минимум одно хранилище должно быть типа HashSet. Тогда перебираем элементы первого хранилища, и для каждого элемента узнаем, имеется ли таковой в другом хранилище. При этом стоимость этой операции равна O(1). Т.е. в общем случае задача линейна и решается за O(n), где n - количество элементов в первом массиве. Примерно также работают БД.
 
Gregory Kovalenko:

Доброго.

Есть double array 1 и double array 2. Необходимо выбрать все значения второго массива, совпадающие со значениями первого - поместить в 3 массив. 

 В документации не удалось найти.

И еще вопрос, счёт в массиве и буфере, куда копируем цены баров, начинается с 0? 

Обобщённо, для произвольных массивов, в т.ч. массивов структур: Как в СУБД - Написать функции типа MakeExtIndex,UpdateExtIndex - построить/обновить внешний индекс массива. На выходе получался-бы массив указателей на элементы сортированный по значениям. По этим внешним индексам можно легко делать операции с множествами - объединение, пересечение,группировки и прочие..

направление отсчёта (которое значение считать 0) известно и его легко учитывать - есть же функции ArrayGetIndex, ArraySetIndex

 
Там может массив из 5-ти элементов, или один раз нужно выполнить выбор, а вы тут базу данных изобретаете. 
 
Dmitry Fedoseev:
Там может массив из 5-ти элементов, или один раз нужно выполнить выбор, а вы тут базу данных изобретаете. 

тут кто-то про СУБД спрашивал, а там как раз примерно так, через ключи и индексы..конечно если массивы невелики, и это разовая/редкая операция, то можно копии отсортировать (хотя-бы одну) и по ним пройтись..для 5-ти элементов так вообще сплошным перебором по оригиналам недолго :-)
поддержка сортированного индекса кстати не очень дорогая операция - фактически вставка элемента в сортированный массив

а про размеры массивов тоже не слова, но судя по второй части вопроса про " направление счёта в массиве и буфере" размер может быть весьма велик

Причина обращения: