Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Кто нам мешает слить массивы и отсортировать их по времени ?
Это структуры. Разве можно сортировать по значению структуры в массиве? Если можно, подскажите, как
Если массивы уже отсортированы - то и сортировать не надо - пишем алгоритм сливания с двумя указателями на каждом массиве, просматриваем следующий элемент на обоих, и скидываем в результирующий массив более ранний элемент, одновременно передвигая указатель на этом исходном массиве.
Видимо, придется так и делать. Я надеялся, что, может, будет более стандартный вариант. Надо тестить, но боюсь, что большой массив будет обрабатываться несколько секунд. А в моем случае, это не допустимо.
я конечно могу ошибаться, но сдаётся мне эта операция называется Join и есть она в любой СУБД и лучше данные изначально держать там.
посмотрите - в CodeBase должны быть либы для MySQL,SQLite (обе точно есть), MS-SQL и по идее должно быть ODBC вообще почти для всего что работает в винде.
Здравствуйте, уважаемые участники форума.
У меня есть 2 очень больших массива (может быть до миллиона элементов) структур вида
Их нужно объединить так, чтобы недостающие элементы (по времени) из одного массива попали в другой. Пример на картинке. Сохранить последовательность по времени необходимо.
Подскажите, как это можно сделать максимально рационально (максимально быстро).
В MS Access можно сделать моментально.
Можно и в Access, и в SQL, и в любой базе данных. У меня задача не просто объединить данные. Суть в том, что несколько индикаторов работают на одном графике (в разных терминалах) и пишут историю в один файл. Чтобы не было конфликтов, и один не затер данные другого, а наоборот - добавил пропуски, мне и нужно считывать большие массивы из файла, обновлять и записывать. А чтобы пропусков на истории было еще меньше - время считывания / проверки / перезаписи должно быть минимальным.
MQL -> DLL ->любая БД. Имхо, проще всего SQLite - там сама СУБД DLL. И писать не в файл, а в БД, ну и читать оттуда при необходимости.
Можно и в Access, и в SQL, и в любой базе данных. У меня задача не просто объединить данные. Суть в том, что несколько индикаторов работают на одном графике (в разных терминалах) и пишут историю в один файл. Чтобы не было конфликтов, и один не затер данные другого, а наоборот - добавил пропуски, мне и нужно считывать большие массивы из файла, обновлять и записывать. А чтобы пропусков на истории было еще меньше - время считывания / проверки / перезаписи должно быть минимальным.
вы изобрели себе "бутылочное горлышко" и теперь героически преодолеваете трудности :-)
просто пишите в разные файлы. А данные пусть объединяет тот кто читает. На край можно в ночи в 23.57 запустить скрипт и объеденить прежние данные в архив
Не работает. Вот это:
MQL -> DLL ->любая БД. Имхо, проще всего SQLite - там сама СУБД DLL. И писать не в файл, а в БД, ну и читать оттуда при необходимости.
Мысль понял, но моих знаний не хватит на организацию СУБД. Спасибо за совет.
Мысль понял, но моих знаний не хватит на организацию СУБД. Спасибо за совет.
СУБД не надо организовывать.) Скажем Access, SQL Server, MySQL, SQLite и пр. - это и есть СУБД. Вам только таблицу(ы) сделать и немного язык SQL посмотреть. Экземплы делаем под себя, и все дела. Предварительно можно в Access немного потренироваться-отработать.
Сделал, как и рекомендовали, через перебор по 2-м указателям. Насколько быстро работает на больших массивах - сказать не могу, буду тестить.
Спасибо всем, кто откликнулся.
P.S. Теоретически, можно и сортировку входящих массивов сделать, если создать двумерный массив типа double. Array[][1]. И в него перебором цикла скопировать этот массив (дату преобразовывать также в тип doouble). Дата помещается в первое измерение, цена - во второе. Сортировка двумерного массива по первому измерению возможна. После сортировки массив также перебирается и double обратно переформатируется в дату.