定義された要素の配列をクリアする。 - ページ 6

 
TheXpert:
ある人は42品目、ある人は6品目、ある人は30品目。そんな問答で、中にどんなアホがいるのか想像するのが怖い
+1000500
 
Реter Konow:

すみません。線を逆にする必要があるようです。

走ってみましたか?走らなくても、コピー時に配列から外れても 問題ないことが分かります。

if(deleted)Arr[a1] = Arr[a1 + deleted];
 
Sergey Chalyshev:
+1000500

サーカスはすでに出発しています。

 
Dmitry Fedoseev:

基本的なことをきちんとやるしかない。

ここがポイントです。

問題を解決するためには、正しい(戦略)アプローチが必要です。

 
Dmitry Fedoseev:

サーカスはすでに出発しています。

どこに行ったの?サーカスのような?

どこにも行かないと思うし、行ったとしても長くは続かないし、必ず戻ってくるはずだ)

 
Konstantin Nikitin:

走ってみましたか?走らなくても、コピー時のアレイの 抜けが悪くならないことがわかります。

ちょっと待ってください。自分の解答を確認するただ、頭に浮かんだことを書き留めるだけ。調べてみますね。

 
//+------------------------------------------------------------------+
//|                                             Erase and Resize.mq5 |
//|                                                      Peter Konow |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Peter Konow"
#property link      "https://www.mql5.com"
#property version   "1.00"
//--------------------------------------------------------------------
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   int Arr[20] = {1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,1,2};
   ulong q1 = GetMicrosecondCount(); 
   //--------------------------------
   int deleted = 0,q = 0;
   //-------------- 
   for(int a1 = 0; a1 < ArraySize(Arr); a1++)
     {
      if(deleted)Arr[q] = Arr[q + deleted];
      if(Arr[q] == 3){deleted++; q--;}
      q++;
     }
   //--------------
   ulong q2 = GetMicrosecondCount(); 
   //--------------------------------
   //ArrayResize(Arr, ArraySize(Arr) - deleted);    
   //--------------------------------
   Print(Arr[0],",",Arr[1],",",Arr[2],",",Arr[3],",",Arr[4],",",Arr[5],",",Arr[6],",",Arr[7],",",Arr[8],",",Arr[9],
        ",",Arr[10],",",Arr[11],",",Arr[12],",",Arr[13],",",Arr[14],",",Arr[15],",",Arr[16],",",Arr[17],",",Arr[18],",",Arr[19]);
   Print("Array new size  ",ArraySize(Arr),"  Тime of operation  ",q2-q1,"  deleted  ",deleted);
   //--------------------------------  
  }
//+------------------------------------------------------------------+
2018.11.13 13:49:15.813 Erase and Resize (USDJPY,H1)    Array new size  20  Тime of operation  1  deleted  6
2018.11.13 13:49:15.813 Erase and Resize (USDJPY,H1)    1,2,1,2,1,2,1,2,1,2,1,2,1,2,3,1,2,3,1,2  <--------------последние шесть цифр остались неизмененными, потому что не сделал АrrayResize;
Discover new MetaTrader 5 opportunities with MQL5 community and services
Discover new MetaTrader 5 opportunities with MQL5 community and services
  • www.mql5.com
Ask questions on technical analysis, discuss trading systems and improve your MQL5 programming skills to develop your own trading strategies. Communicate and share your experience with traders from anywhere in the world, answer questions and help beginners — MQL5.community is developing along with you. How to avoid opening of new order Hello...
 

この解決策では、すべてのトリプルを削除しますが、末尾の数字は削除しません。なぜなら、これらの数字はArrayResize 時に消滅するはずだからです。

つまり、最後の桁は、修正された配列に含まれないものである。ArrayResizeを しなかっただけです。

 
Реter Konow:

何を話すんだ?

Print(Arr[0],",",Arr[1],",",Arr[2],",",Arr[3],",",Arr[4],",",Arr[5],",",Arr[6],",",Arr[7],",",Arr[8],",",Arr[9],
        ",",Arr[10],",",Arr[11],",",Arr[12],",",Arr[13],",",Arr[14],",",Arr[15],",",Arr[16],",",Arr[17],",",Arr[18],",",Arr[19]);
おそらく、クソコテで掲示板を中傷するのは、さらにどう洗練されているのでしょう。
 
Sergey Dzyublik:

何を話すんだ?

おそらく、クソコテで掲示板を汚すのは、さらに洗練された方法でしょう。

もっと手っ取り早い解決策はないのでしょうか?

内容よりも形にこだわる人を貶めるのが好きなんです。嬉しい限りです(笑)。