¿Cómo puedo eliminar un elemento de una matriz (unidimensional bidimensional)?

 
¿Cómo puedo eliminar un elemento de una matriz? ¿Necesito saber el número de elementos almacenados en él?
 

Hay una función, aunque nadie la ha visto (ni en la ayuda ni en la web), pero está ahí )


 
Ilya Malev:

Hay una función, aunque nadie la ha visto (ni en la ayuda ni en la web), pero está ahí )

¿una función secreta, y cómo funciona?
 
Ilya Malev:

Hay una función, aunque nadie la ha visto (ni en la ayuda ni en la web), pero está ahí )


Próximamente

 

Para eliminar un solo elemento, la función

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);
}

Resultado

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

Entonces puedes convertir esta función a tipo bool, para poder controlar su ejecución. Básicamente, si eres inteligente y puedes controlar los valores que le envías, puedes usarlo de cualquier manera...

Recuerda que no puedes reducir el tamaño de las matrices estáticas.

 
Alexey Viktorov:

Para eliminar un solo elemento, la función

Resultado

Entonces puedes convertir esta función a tipo bool, para poder controlar su ejecución. Básicamente, si eres inteligente y puedes controlar los valores que le envías, puedes usarlo de cualquier manera...

No olvides que no puedes reducir el tamaño de las matrices estáticas.

El camarada ha escrito: unidimensional y bidimensional. Su función no funciona con las dos dimensiones. Muéstrame cómo hacer que una función con el mismo nombre funcione para ambos :)

 
Alexey Viktorov:

No olvides que las matrices estáticas no pueden reducir su tamaño.

No estoy reduciendo el tamaño del array, estoy eliminando un elemento del mismo, son cosas diferentes. Entiendo que su función eliminó el valor1,13612, se especifica en la líneadellArrayElement(3, array); es decir, el 3er elemento se elimina de la matriz, es decir, se entiende correctamente? ¿Cómo de rápido son estos experimentos cargando el programa mucho?

 
Aleksey Semenov:
¿una función secreta, y cómo funciona?

En C++ existen este tipo de funciones, se introduce la librería y se realiza la acción. Pero tenemos en cuenta el hecho de que mql no tiene tales funciones y queremos utilizar funciones escritas a mano.

 

Encontré estehttp://kvodo.ru/urok-7-2-massivyi-osnovnyie-operatsii.html (y también este https://purecodecpp.com/archives/1935)

Supongamos que necesitamos eliminarel m-ésimo elemento en número de lamatrizX que consta den elementos. Para ello, basta con escribir el (m+1)-ésimo elemento en lugar del elementom, el (m+2)-ésimo elemento en lugar del (m+1)-ésimo, y así sucesivamente,n-1 en lugar de(n-2)y utilizar elelementon-1cuando se trabaje con esta matriz más adelante:

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--; //уменьшение количества элементов в массиве

Pero eso es con C++. Pero aquí necesitamos saber el número de elementos almacenados en el array. Hay que escribir una función que lea los elementos tal y como se escriben.

 
Alexey Viktorov:

Para eliminar un elemento, esta función estará bien

Y si quieres borrar, por ejemplo, no un valor de precio sino una fecha de una matriz, ¿trabajaráCopyOpen con fechas, ya que según entendí en la ayuda esta función funciona con precios?

 
Ilya Malev:

Hay una función, aunque nadie la ha visto (ni en la ayuda ni en la web), pero está ahí )


¿Cómo funciona?

int ArrayRemove()

No hay ninguna descripción de ello en la ayuda, ¿dónde puedo leer sobre ello?

Razón de la queja: