Как удалить элемент из массива (одномерного двумерного)?

 

Есть такая функция, хотя никто её не видел (ни в справке ни на сайте), но она есть )


 
Ilya Malev:

Есть такая функция, хотя никто её не видел (ни в справке ни на сайте), но она есть )

о, секретная функция, и как, работает?
 
Ilya Malev:

Есть такая функция, хотя никто её не видел (ни в справке ни на сайте), но она есть )


Скоро появится

 

Для удаления одного элемента вполне подойдёт такая функция

void OnStart()
{
 double array[];
 CopyOpen(_Symbol, PERIOD_CURRENT, 0, 6, array);
 ArrayPrint(array);
 dellArrayElement(3, array);
 ArrayPrint(array);
}/*******************************************************************/

void dellArrayElement(int shift, double &arr[])
{
 int arrSize = ArraySize(arr);
 if(shift > arrSize)
  return;
 if(shift < arrSize)
 ArrayCopy(arr, arr, shift, shift+1);
 ArrayResize(arr, arrSize-1);
}

Результат

2018.12.22 09:55:06.206 !00 (EURUSD,M15)        1.13588 1.13607 1.13588 1.13612 1.13586 1.13614
2018.12.22 09:55:06.206 !00 (EURUSD,M15)        1.13588 1.13607 1.13588 1.13586 1.13614

Дальше можно самостоятельно преобразовать эту функцию в тип bool чтобы можно было контролировать факт выполнения. А в принципе, если руки не кривые и можете контролировать какие значения в неё отправляете, можно и так пользовать...

Не следует забывать, что статическим массивам уменьшить размер нельзя.

 
Alexey Viktorov:

Для удаления одного элемента вполне подойдёт такая функция

Результат

Дальше можно самостоятельно преобразовать эту функцию в тип bool чтобы можно было контролировать факт выполнения. А в принципе, если руки не кривые и можете контролировать какие значения в неё отправляете, можно и так пользовать...

Не следует забывать, что статическим массивам уменьшить размер нельзя.

У товарища написано: одномерного и двумерного. Ваша функция с двумерным не работает. Покажите, как сделать, чтобы и с тем и с тем работала функция с одинаковым названием :)

 
Alexey Viktorov:

Не следует забывать, что статическим массивам уменьшить размер нельзя.

Я не уменьшаю размер массива а удаляю из него элемент это разные вещи. Я так понимаю по вашей функции удалено значение 1.13612, оно указано в строке dellArrayElement(3, array); массива т. е. 3ий элемент удалён из массива я правильно понял? Какая скорости работы подобных экспериментов сильно грузят программу? 

 
Aleksey Semenov:
о, секретная функция, и как, работает?

На с++ такие функции есть, подключаешь библиотеку и выполняется данное действие. Но учитывается тот факт что на mql  таких функций нет и хочется использовать рукописные функции.  

 

Я нашёл вот это http://kvodo.ru/urok-7-2-massivyi-osnovnyie-operatsii.html (и ещё вот это https://purecodecpp.com/archives/1935)

Пусть нужно удалить из массива X, состоящего из n элементов, m-й по номеру элемент. Для этого достаточно записать (m+1)-й элемент на место элемента m, (m+2)-й на место (m+1)-го и т.д., n-1 на место(n-2) и при дальнейшей работе с этим массивом использовать n-1 элемент:

cout<<"\n m="; cin>>m; //ввод номера элемента, подлежащего удалению
for (i=m; i<n-1; X[i+1],i++); //удаление m-го элемента
for (i=0; i<n-1; i++) cout<<X[i]<<"\t"; //вывод измененного массива
n--; //уменьшение количества элементов в массиве

Но это с с++. Но тут нужно знать количество элементов хранящееся в массиве. Нужно писать функцию которая будет по мере записи считать элементы.

 
Alexey Viktorov:

Для удаления одного элемента вполне подойдёт такая функция

А если нужно удалить из массива например не ценовое значение а дату будет ли CopyOpen работать с датами из справки мне стало понятно что эта функция работает с ценами?

 
Ilya Malev:

Есть такая функция, хотя никто её не видел (ни в справке ни на сайте), но она есть )


как работает функция 

int ArrayRemove()

Описания в справочнике про неё нет где про неё почитать?

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