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

 
Seric29:

機能の仕組み

ハンドブックにはどこに書いてあるのか、記述がないのですが?

このスレッド読んでますか?Admin replied - description coming soon.

 
Seric29:

配列のサイズを小さくするのではなく、配列から要素を取り除くのですが...。

void  ArrayFill( 
   void&  array[],       // массив 
   int    start,         // индекс начального элемента 
   int    count,         // количество элементов 
   void   value          // значение, которым заполняется массив 
   );

それではダメなのでしょうか?

 
Ilya Malev:

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

二次元の話は出てきませんでしたね。しかし、2次元自体も、どのインデックスから配列のピックアップに書き込むか、どのインデックスからソースから読み込むか、わずかに異なる値だけがコピーされた。原理的には、mqlで許容される3-4次元の配列であれば、この問題を解くことができる

 
Seric29:

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

しかし、もしその条件が

トレーディング、自動売買システム、ストラテジーテストに関するフォーラム

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

セリック29 さん 2018.12.21 23:50

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

となれば、当然、配列のサイズも小さくなるはずです。そうでしょう?

はい、この例では配列の3番目の要素が削除されました。速度や一部の体の部位は、他の支店で測定しています。この場合、速度はごく普通です。おおよその速度値を知るには、数百回の削除を何度も行う必要があります。なぜ、そんなことをしたいのだろう?

 
https://www.mql5.com/ru/forum/289594
Очистка массива от заданного (ых) элементов
Очистка массива от заданного (ых) элементов
  • 2018.11.12
  • www.mql5.com
Есть массив содержащий набор данных по типу 1,2,3,6,9,5,6,3,25,6,8,7,4 нужно удалить например значения 3 и на выходе получить тот же массив без 3 и...
 
Alexey Viktorov:

二次元の方は何も見てないんですけどね。しかし、2次元も、どのインデックスから配列に書き込むか、どのインデックスからソースから読み込むかの値が少し違うだけで、それ自体はコピーされています。原理的には、mqlで許容される3-4次元の配列であれば、この問題を解くことができる

原理 的には解決可能なんだろうけど。ただし、同じ名前の 関数では解けないようです。

 
Ilya Malev:

原理 的には解決可能なんだろうけど。ただし、同じ名前の 関数では解けないようです。

なぜ?小学校の授業としてやってください。

のようなものです。

class A
{
 void DellArrElement(int i, double &arr[]);
 void DellArrElement(int i, double &arr[][]);
};

void A::DellArrElement(int i, double &arr[])
 {
  // тело функции для одномерного массива
 };

void A::DellArrElement(int i, double &arr[][])
 {
  // тело функции для двухмерного массива
 };

その場で書いたものなので、不正確な可能性があることをお詫びします。

 

配列の要素の順序が重要でない場合は、十分に迅速に行われます。

#define  ARRAY_RESERVE_SIZE    1000

template<typename T>
void DeleteElementFromArray(T &array[], int elementToDelete)
{  
   int arraySize = ArraySize(array);
   if (elementToDelete < 0 || elementToDelete >= arraySize)
      return;
      
   array[elementToDelete] = array[arraySize - 1];
   ArrayResize(array, arraySize - 1, ARRAY_RESERVE_SIZE);
}

これは1次元配列の場合です。2次元以上の配列は、実は1次元の配列なのです。1次元の配列は論理的にはN次元の配列として表現することができる。つまり、実際には常に一次元の配列で十分なのである。

 
Alexey Viktorov:

なぜ?小学校の授業としてやってください。

みたいなものです。

その場で書いたものなので、不正確な点があればご容赦ください。

コンパイルはしてみましたか?

 
Ilya Malev:

これをコンパイルしてみましたか?

まだ、フォーラムサイトに直接コンパイラを作る方法は見つかっていないそうです。

トレーディング、自動売買システム、ストラテジーテストに関するフォーラム

配列(1次元2次元)から要素を取り除くには?

アレクセイ・ビクトロフ さん 2018.12.22 21:25

なぜ?小学校の授業としてやってください。

みたいな感じ。

class A
{
 void DellArrElement(int i, double &arr[]);
 void DellArrElement(int i, double &arr[][]);
};

void A::DellArrElement(int i, double &arr[])
 {
  // тело функции для одномерного массива
 };

void A::DellArrElement(int i, double &arr[][])
 {
  // тело функции для двухмерного массива
 };

手書きで書いたので、不正確な点があることをお詫びします。