- Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам
- Вопросы от начинающих MQL4 MT4 MetaTrader 4
- Надёжные реализации экспертов
Здравствуйте! Как добавлять в массив значение понял, а вот как из массива удалить ячейку с ненужным значением понять не могу, справку прочитал все функции с массивами, но ответа так и не нашёл. Массив у меня одномерный, там хранятся тикеты ордеров, когда перекидываю из одного массива в другой тикет ордера, то из которого перекинул массива, надо удалить значение и уменьшить его на 1 ячейку.
Копирование массива "сам в себя"
int ArrayCopy( void& dst_array[], // куда копируем const void& src_array[], // откуда копируем int dst_start=0, // с какого индекса пишем в приемник // На место ненужного тикета int src_start=0, // с какого индекса копируем из источника // Со следующего индекса int count=WHOLE_ARRAY // сколько элементов // Можно пропустить );
Затем назначить новый размер массива, на 1 меньше, в результате чего последний индекс будет удалён...
- docs.mql4.com
Здравствуйте! Как добавлять в массив значение понял, а вот как из массива удалить ячейку с ненужным значением понять не могу, справку прочитал все функции с массивами, но ответа так и не нашёл. Массив у меня одномерный, там хранятся тикеты ордеров, когда перекидываю из одного массива в другой тикет ордера, то из которого перекинул массива, надо удалить значение и уменьшить его на 1 ячейку.
Удалить надо значение, находящееся в общем случае где-то в середине массива? Например 1 2 3 9 4 5 6 - надо удалить элемент с номером 3 (четвертый с начала). Для этого начиная с номера удаляемого элемента копируем в цикле в каждый элемент значение элемента, стоящего справа. Получаем 1 2 3 4 5 6 6. Теперь удаляем последний элемент уменьшением размерности на 1. Получаем 1 2 3 4 5 6
Именно этот цикл заменяется копированием массива "сам в себя".
Здравствуйте! Как добавлять в массив значение понял, а вот как из массива удалить ячейку с ненужным значением понять не могу, справку прочитал все функции с массивами, но ответа так и не нашёл. Массив у меня одномерный, там хранятся тикеты ордеров, когда перекидываю из одного массива в другой тикет ордера, то из которого перекинул массива, надо удалить значение и уменьшить его на 1 ячейку.
ваша проблема решена или есть сомнения по поводу сказанного?
с уважением.
P.S. есть и другой вариант, более простой.
Именно этот цикл заменяется копированием массива "сам в себя".
Согласен. Надо указать в dst_start номер удаляемого элемента. Тогда все последующие скопируются со сдвигом влево
когда это все учил - функция копирования массива отсутствовала. Вот написал - свой вариант закомментил
//+-------------------------------------------------------+ //| Уменьшить массив PROBA.mq4| //+-------------------------------------------------------+ #property strict int Массив[7]={1,2,3,9,4,5,6}; // Массив для удаления одного элемента int Удали=3; // Номер удаляемого элемента void OnStart() { Вывод(); // for(int Счет=Удали; Счет<ArraySize(Массив)-1; Счет++) // Массив[Счет]=Массив[Счет+1]; ArrayCopy(Массив,Массив,Удали,Удали+1,ArraySize(Массив)-Удали-1); Вывод(); ArrayResize(Массив, ArraySize(Массив)-1); Вывод(); } void Вывод() // Функция вывода массива для пояснения происходящего { string Строка=""; for(int Счет=0; Счет<ArraySize(Массив); Счет++) Строка+=" "+(string) Массив[Счет]; Alert(Строка); }
Добрый день, Артем.
ваша проблема решена или есть сомнения по поводу сказанного?
с уважением.
P.S. есть и другой вариант, более простой.
Сомнения есть)) Если можете подсказать более простое решение, то я был бы рад его увидеть.
Сомнения есть)) Если можете подсказать более простое решение, то я был бы рад его увидеть.
double massiv[]; ArrayResize(massiv,25); for(int q=0;q<ArraySize(massiv);q++)massiv[q]=q+1; //допустим нам нужно удалить 19 элемент int x=19; //индекс удаляемого элемента int size=ArraySize(massiv)-1; //это все что нужно сделать massiv[x]=massiv[size]; //переносим элемент ArrayResize(massiv,size); //сокращаем массивс уважением.
P.S. это решение в рамках поставленной вами задачи.
Остроумно! Последний элемент на место удаляемого и обрезать хвост. Ну это если порядок безразличен
с уважением.
почитайте первый пост, речь идет о тикетах, порядок не имеет значение.
с уважением.
Как же не имеет? Вы слышали о fifo ? И про американские правила...
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования