주어진 요소의 배열 지우기 - 페이지 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 :

무슨 얘기가 있어???

아마도, 더러운 코드로 포럼을 더럽히는 것이 얼마나 더 우아할까요?

더 빠른 솔루션이 있습니까?

젠장, 내용이 아닌 형식에 집착하는 사람들을 다루는 방법을 좋아합니다. 순수한 기쁨.)))