配列(1次元2次元)から要素を削除するにはどうすればよいですか?

 
配列から要素を削除するにはどうすればよいですか?格納されている要素数を知る必要があるのでしょうか?
 

誰も見ていない(ヘルプでもホームページでも)けど、機能はありますよ )


 
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型に変換することで、その実行を制御することができます。基本的には、頭がよくて、送る値をコントロールできれば、とりあえず使えるのですが...。

静的配列の サイズを小さくすることはできないことを忘れないでください。

同志は書いている: 一寸法師と二寸法師。2次元では、この機能は使えません。同じ名前の関数を両方に使えるようにする方法を教えてください :)

 
Alexey Viktorov:

静的配列は サイズを小さくすることができないことを忘れないでください。

配列のサイズを小さくしているのではなく、配列から要素を取り除いているのです。この関数が値1.13612を 削除することは、dellArrayElement(3, array) という行で指定されていることを理解しました。このような実験では、プログラムをたくさん読み込むとどのくらいの速度になるのでしょうか?

 
Aleksey Semenov:
あ、秘密の機能ですか、その仕組みは?

C++ではそのような関数があり、ライブラリを差し込むとアクションが実行されます。しかし、mqlにはそのような機能がないことを考慮し、手書きの機能を使いたいと考えています。

 

私はこのhttp://kvodo.ru/urok-7-2-massivyi-osnovnyie-operatsii.html(また、このhttps://purecodecpp.com/archives/1935)を見つけました。

n個の要素からなる配列Xから番号でm番目の 要素を削除する必要があると する。そのためには,要素mの 代わりに(m+1)番目の 要素,(m+1)番目の 要素の代わりに(m+2)番目の 要素,(n-2)代わりにn- 1と書き,さらにこの配列を扱うときには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--; //уменьшение количества элементов в массиве

でも、それはC++を使った場合です。しかし、ここでは配列に格納されているアイテムの数を知る必要があります。要素をそのまま読み込むような関数を書く必要があります。

 
Alexey Viktorov:

1つの要素を削除するには、この関数で十分です。

また、例えば配列から価格値ではなく日付を削除したい場合、CopyOpenは 日付でも動作するのでしょうか。ヘルプでこの機能は価格に対して動作すると理解したのですが。

 
Ilya Malev:

誰も見ていない(ヘルプでもホームページでも)けど、機能はありますよ )


どのように機能するのですか?

int ArrayRemove()

ヘルプに記載がないのですが、どこで読めますか?

理由: