열린 직위를 그룹으로 나누기 - 페이지 4

 
Alexey Viktorov :

삭제되는 배열 옆의 위치에서 시작하여 삭제되는 배열부터 쓰기 시작하여 배열을 "자체로" 복사합니다. 그런 다음 Grigori.SB가 제안한 대로 크기를 조정합니다.

흥미롭게도 내가 당신을 올바르게 이해했다면이 기능을 사용해야합니까?

 int    ArrayCopy ( 
   void &        dst_array[],         // куда копируем 
   const void &  src_array[],         // откуда копируем 
   int           dst_start= 0 ,         // с какого индекса пишем в приемник 
   int           src_start= 0 ,         // с какого индекса копируем из источника 
   int           count= WHOLE_ARRAY      // сколько элементов 
   );
 
Sergey Voytsekhovsky :

좋은 아침입니다. 답변 감사합니다.

당신은 아마 주의를 기울이지 않았을 것입니다. 위에서 볼 수 있듯이 MQL5와 관련된 모든 질문입니다.

나는 그 차이가 때때로 근본적인 것은 아니지만 그럼에도 불구하고 이해합니다. 당신이 제공한 기능은 배열의 크기를 변경하고 크기가 줄어들면 아마도 불필요한 요소를 잘라낼 것입니다.

이것은 필요한 것이 아닙니다. 값으로 요소를 찾아서 제거해야 합니다. 예, 이 기능을 사용하려고 했습니다. # 23에서 이에 대해 썼습니다. 어쨌든 - 감사합니다.

저도 신경쓰지 않았습니다. mql5에는 ArrayRemove 기능 이 있으며 문제가 없습니다.

 

이 경우 ArrayRemove 가 더 적합하며 참고서에 예제가 있으며 이것이 작동하는 방식입니다.

 //| Script program start function                                    | 
//+------------------------------------------------------------------+ 
void OnStart () 
  { 
//--- объявим массив фиксированного размера и заполним значениями 
   int array[ 10 ]; 
   for ( int i= 0 ;i< 10 ;i++) 
     { 
      array[i]=i; 
     } 
//--- покажем массив до удаления элементов 
   Print ( "До вызова ArrayRemove()" ); 
   ArrayPrint (array); 
//--- удалим 2 элемента из массива и покажем новый состав 
   ArrayRemove (array, 4 , 2 ); 
   Print ( "После вызова ArrayRemove()" ); 
   ArrayPrint (array); 
/* 
   Результат выполнения:  
   До вызова ArrayRemove() 
   0 1 2 3 4 5 6 7 8 9 
   После вызова ArrayRemove() 
   0 1 2 3 6 7 8 9 8 9 
*/

이는 작업이 아닙니다. 이러한 예제와 함수는 1차원 배열에 맞게 조정되었지만 2차원 배열에서는 작동하고 싶지 않습니다.

나는 매우 중요하고 근본적인 것을 놓치고 있다고 생각합니다. 그게 바로???

내가 말하는데, 수첩은 이미 지워졌다.

 
Sergey Voytsekhovsky :

이 경우 ArrayRemove가 더 적합하며 참고서에 예제가 있으며 이것이 작동하는 방식입니다.

이는 작업이 아닙니다. 이러한 예제와 함수는 1차원 배열에 맞게 조정되었지만 2차원 배열에서는 작동하고 싶지 않습니다.

나는 매우 중요하고 근본적인 것을 놓치고 있다고 생각합니다. 그게 바로???

내가 말하는데, 수첩은 이미 지워졌다.

순서가 중요한가요?
마지막 위치에서 삭제할 위치로 복사 하고 배열의 크기를 변경합니다 .
 
Alexey Viktorov :
2차원 배열의 경우 삭제할 행 번호에 2를 곱해야 합니다. 3차원 배열의 경우 3...

나는 여기에서 그것을 잘 이해하지 못했습니다. 더 자세히 설명하거나 더 나은 방법으로 제 코드의 일부를 편집한 것을 보여주십시오. 제가 위에 게시했습니다. 불편하면 어떻게든 해결하겠습니다.

 
Aliaksandr Hryshyn :
순서가 중요한가요?
마지막 위치에서 삭제할 위치로 복사하고 배열의 크기를 변경합니다.

아니요, 순서는 중요하지 않습니다. 알려진(값으로 찾은 색인, 알려진) 레코드를 삭제하기만 하면 됩니다. 배열의 모든 위치(처음, 중간, 끝)에 있을 수 있습니다. ArrayRemove 는 훌륭하고 모든 것이 잘 될 것입니다. 그러나 이 기능을 2차원 배열에 어떻게 적용합니까? 설명서에 그것에 대한 단어가 없습니다.

 
Sergey Voytsekhovsky :

아니요, 순서는 중요하지 않습니다. 알려진(값으로 찾은 색인, 알려진) 레코드를 삭제하기만 하면 됩니다. 배열의 모든 위치(처음, 중간, 끝)에 있을 수 있습니다. ArrayRemove는 훌륭하고 모든 것이 잘 될 것입니다. 그러나 이 기능을 2차원 배열에 어떻게 적용합니까? 설명서에 그것에 대한 단어가 없습니다.

내가 말했듯이 두 번째 차원의 배열만 복사됩니다.
배열의 크기를 조정할 때 세 번째 매개변수를 지정합니다(예: 32).
 
Sergey Voytsekhovsky :

이 경우 ArrayRemove가 더 적합하며 참고서에 예제가 있으며 이것이 작동하는 방식입니다.

이는 작업이 아닙니다. 이러한 예제와 함수는 1차원 배열에 맞게 조정되었지만 2차원 배열에서는 작동하고 싶지 않습니다.

나는 매우 중요하고 근본적인 것을 놓치고 있다고 생각합니다. 그게 바로???

내가 말하는데, 수첩은 이미 지워졌다.

말도 안되는 소리. 설명서를 읽지 않고 이 기능을 사용했습니다. 디버거에서 요소가 제거되고 배열의 크기가 즉시 감소하는 방법을 보았습니다. 확인했습니다. 구조의 배열에서도 문제 없이 작동합니다. 이제 코드로 작업할 수 없고 단어로만 작업할 수 있습니다. 예를 들어 2차원 배열에서 세 번째 인덱스를 제거해야 합니다. 다섯 번째와 여섯 번째 값을 제거해야 함을 알 수 있습니다. 복사할 때 함수 종류는 모든 값을 1차원 배열로 빌드하고 세 번째 쌍이 인덱스 5에서 시작하는 것으로 나타났습니다. 일반적으로 이것은 몇 번의 실험 후에 이해하게 됩니다.

ArrayRemove는 가능하면 2-4차원 배열을 확인하겠습니다. 불필요한 것으로 확인하지 않았으며 작동하지 않는다고 의심하지 않았습니다.


추가됨:

확인했습니다. 정적 배열은 크기를 조정할 수 없다는 사실을 잊어서는 안됩니다. 따라서 설명서의 예에서 배열의 크기는 동일하게 유지되고 마지막 두 줄이 반복됩니다. 동적 배열 에서 행을 삭제할 때 문제 없이 크기가 변경됩니다.

디렉토리는 모니터의 구멍에 덮어써야 합니다. :))))).

 /********************Script program start function*******************/
void OnStart ()
 {
   double arrTest[][ 2 ];
   for ( int i = 0 ; i < 10 ; i++)
   {
     ArrayResize (arrTest, i+ 1 );
    arrTest[i][ 0 ] = iOpen ( _Symbol , PERIOD_CURRENT , i);
    arrTest[i][ 1 ] = iClose ( _Symbol , PERIOD_CURRENT , i);
   }
     Print ( "ArraySize " , ArraySize (arrTest));
     ArrayPrint (arrTest);
     ArrayRemove (arrTest, 3 , 2 );
     Print ( "ArraySize " , ArraySize (arrTest));
     ArrayPrint (arrTest);
         );
 } /******************************************************************/
2020.03 . 23 11 : 36 : 02.296 00 (GBPUSD,H1)   ArraySize 20
2020.03 . 23 11 : 36 : 02.296 00 (GBPUSD,H1)          [, 0 ]    [, 1 ]
2020.03 . 23 11 : 36 : 02.296 00 (GBPUSD,H1)  [ 0 ,] 1.16465 1.16084
2020.03 . 23 11 : 36 : 02.296 00 (GBPUSD,H1)  [ 1 ,] 1.17094 1.16461
2020.03 . 23 11 : 36 : 02.296 00 (GBPUSD,H1)  [ 2 ,] 1.16878 1.17084
2020.03 . 23 11 : 36 : 02.296 00 (GBPUSD,H1)  [ 3 ,] 1.16525 1.16876
2020.03 . 23 11 : 36 : 02.296 00 (GBPUSD,H1)  [ 4 ,] 1.16467 1.16525
2020.03 . 23 11 : 36 : 02.296 00 (GBPUSD,H1)  [ 5 ,] 1.16491 1.16467
2020.03 . 23 11 : 36 : 02.296 00 (GBPUSD,H1)  [ 6 ,] 1.16186 1.16498
2020.03 . 23 11 : 36 : 02.296 00 (GBPUSD,H1)  [ 7 ,] 1.15985 1.16185
2020.03 . 23 11 : 36 : 02.296 00 (GBPUSD,H1)  [ 8 ,] 1.16156 1.15985
2020.03 . 23 11 : 36 : 02.296 00 (GBPUSD,H1)  [ 9 ,] 1.15447 1.16156
2020.03 . 23 11 : 36 : 02.296 00 (GBPUSD,H1)   ArraySize 16
2020.03 . 23 11 : 36 : 02.296 00 (GBPUSD,H1)          [, 0 ]    [, 1 ]
2020.03 . 23 11 : 36 : 02.296 00 (GBPUSD,H1)  [ 0 ,] 1.16465 1.16084
2020.03 . 23 11 : 36 : 02.296 00 (GBPUSD,H1)  [ 1 ,] 1.17094 1.16461
2020.03 . 23 11 : 36 : 02.296 00 (GBPUSD,H1)  [ 2 ,] 1.16878 1.17084
2020.03 . 23 11 : 36 : 02.296 00 (GBPUSD,H1)  [ 3 ,] 1.16491 1.16467
2020.03 . 23 11 : 36 : 02.296 00 (GBPUSD,H1)  [ 4 ,] 1.16186 1.16498
2020.03 . 23 11 : 36 : 02.296 00 (GBPUSD,H1)  [ 5 ,] 1.15985 1.16185
2020.03 . 23 11 : 36 : 02.296 00 (GBPUSD,H1)  [ 6 ,] 1.16156 1.15985
2020.03 . 23 11 : 36 : 02.296 00 (GBPUSD,H1)  [ 7 ,] 1.15447 1.16156

3차원 배열을 만들었고 결과는 다음과 같습니다.

 2020.03 . 23 11 : 40 : 11.328 00 (GBPUSD,H1)   ArraySize 30
2020.03 . 23 11 : 40 : 11.328 00 (GBPUSD,H1)          [, 0 ]    [, 1 ]    [, 2 ]
2020.03 . 23 11 : 40 : 11.328 00 (GBPUSD,H1)  [ 0 ,] 0.00000 1.16465 1.16255
2020.03 . 23 11 : 40 : 11.328 00 (GBPUSD,H1)  [ 1 ,] 1.00000 1.17094 1.16461
2020.03 . 23 11 : 40 : 11.328 00 (GBPUSD,H1)  [ 2 ,] 2.00000 1.16878 1.17084
2020.03 . 23 11 : 40 : 11.328 00 (GBPUSD,H1)  [ 3 ,] 3.00000 1.16525 1.16876
2020.03 . 23 11 : 40 : 11.328 00 (GBPUSD,H1)  [ 4 ,] 4.00000 1.16467 1.16525
2020.03 . 23 11 : 40 : 11.328 00 (GBPUSD,H1)  [ 5 ,] 5.00000 1.16491 1.16467
2020.03 . 23 11 : 40 : 11.328 00 (GBPUSD,H1)  [ 6 ,] 6.00000 1.16186 1.16498
2020.03 . 23 11 : 40 : 11.328 00 (GBPUSD,H1)  [ 7 ,] 7.00000 1.15985 1.16185
2020.03 . 23 11 : 40 : 11.328 00 (GBPUSD,H1)  [ 8 ,] 8.00000 1.16156 1.15985
2020.03 . 23 11 : 40 : 11.328 00 (GBPUSD,H1)  [ 9 ,] 9.00000 1.15447 1.16156
2020.03 . 23 11 : 40 : 11.328 00 (GBPUSD,H1)   ArraySize 24
2020.03 . 23 11 : 40 : 11.328 00 (GBPUSD,H1)          [, 0 ]    [, 1 ]    [, 2 ]
2020.03 . 23 11 : 40 : 11.328 00 (GBPUSD,H1)  [ 0 ,] 0.00000 1.16465 1.16255
2020.03 . 23 11 : 40 : 11.328 00 (GBPUSD,H1)  [ 1 ,] 1.00000 1.17094 1.16461
2020.03 . 23 11 : 40 : 11.328 00 (GBPUSD,H1)  [ 2 ,] 2.00000 1.16878 1.17084
2020.03 . 23 11 : 40 : 11.328 00 (GBPUSD,H1)  [ 3 ,] 5.00000 1.16491 1.16467
2020.03 . 23 11 : 40 : 11.328 00 (GBPUSD,H1)  [ 4 ,] 6.00000 1.16186 1.16498
2020.03 . 23 11 : 40 : 11.328 00 (GBPUSD,H1)  [ 5 ,] 7.00000 1.15985 1.16185
2020.03 . 23 11 : 40 : 11.328 00 (GBPUSD,H1)  [ 6 ,] 8.00000 1.16156 1.15985
2020.03 . 23 11 : 40 : 11.328 00 (GBPUSD,H1)  [ 7 ,] 9.00000 1.15447 1.16156
 
Alexey Viktorov :

말도 안되는 소리. 설명서를 읽지 않고 이 기능을 사용했습니다. 디버거에서 요소가 제거되고 배열의 크기가 즉시 감소하는 방법을 보았습니다. 확인했습니다. 구조의 배열에서도 문제 없이 작동합니다. 이제 코드로 작업할 수 없고 단어로만 작업할 수 있습니다. 예를 들어 2차원 배열에서 세 번째 인덱스를 제거해야 합니다. 다섯 번째와 여섯 번째 값을 제거해야 함을 알 수 있습니다. 복사할 때 함수 종류는 모든 값을 1차원 배열로 빌드하고 세 번째 쌍이 인덱스 5에서 시작하는 것으로 나타났습니다. 일반적으로 이것은 몇 번의 실험 후에 이해하게 됩니다.

ArrayRemove는 가능하면 2-4차원 배열을 확인하겠습니다. 불필요한 것으로 확인하지 않았으며 작동하지 않는다고 의심하지 않았습니다.


추가됨:

확인했습니다. 정적 배열은 크기를 조정할 수 없다는 사실을 잊어서는 안됩니다. 따라서 설명서의 예에서 배열의 크기는 동일하게 유지되고 마지막 두 줄이 반복됩니다. 동적 배열 에서 행을 삭제할 때 문제 없이 크기가 변경됩니다.

디렉토리는 모니터의 구멍에 덮어써야 합니다. :))))).

3차원 배열을 만들었고 결과는 다음과 같습니다.

귀하의 예는 매우 느리며 많은 수의 값이 눈에 띄게 나타납니다.
 
Aliaksandr Hryshyn :
귀하의 예는 매우 느리며 많은 수의 값이 눈에 띄게 나타납니다.

무엇을 많이? 매 틱마다 채워지지 않는 배열 요소 가 있습니까? 무엇이 눈에 띌까?