Répartir les postes ouverts en groupes - page 4

 
Alexey Viktorov:

Copie du tableau "dans lui-même", en commençant à la position voisine de celle à supprimer et en écrivant à partir de celle à supprimer. Et puis redimensionnez comme Grigori.S.B l'a suggéré.

Intéressant, si j'ai bien compris, avez-vous besoin d'utiliser cette fonction ?

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

Bonjour, merci pour votre réponse.

Je suppose que vous n'avez pas remarqué, vous pouvez regarder ci-dessus, toutes les questions concernaient MQL5.

Je comprends que la différence n'est pas cruciale parfois, mais néanmoins. La fonction que vous avez citée redimensionne le tableau, en coupant éventuellement des éléments supplémentaires si la taille est réduite.

Ce n'est pas ce qu'il faut. Vous devez supprimer un élément en le trouvant par valeur. J'ai aussi essayé cette fonction, j'en ai parlé dans le numéro 23. Merci quand même.

Je n'y ai pas prêté attention non plus. mql5 a la fonction ArrayRemove et aucun problème.

 

Dans ce cas,ArrayRemove est plus approprié, il y a un exemple dans le manuel, il fonctionne exactement comme ceci

//| 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 
*/

Le seul problème est que ces exemples et fonctions sont conçus pour des tableaux à une dimension, et qu'ils ne veulent pas fonctionner avec des tableaux à deux dimensions.

Je pense que je rate quelque chose de très important et de fondamental. Mais qu'est-ce que c'est ?

Je vous le dis, j'ai déjà perdu le livre de référence.

 
Sergey Voytsekhovsky:

Dans ce cas,ArrayRemove est plus approprié, il y a un exemple dans le manuel, il fonctionne exactement comme ceci

Le seul problème est que ces exemples et fonctions sont conçus pour des tableaux à une dimension, et qu'ils ne veulent pas fonctionner avec des tableaux à deux dimensions.

Je pense que je rate quelque chose de très important et de fondamental. Mais qu'est-ce que c'est ?

Je te le dis, j'en ai déjà perdu la trace.

L'ordre est-il important ?
Copie de la dernière position à celle à supprimer, redimensionne le tableau.
 
Alexey Viktorov:
Pour un tableau à deux dimensions, vous devez multiplier par 2 le numéro de la ligne à supprimer. Pour un tableau à 3 dimensions, multipliez par 3...

Je ne comprends pas bien ce que vous voulez dire, pourriez-vous élaborer sur ce point, ou mieux encore, me montrer la modification d'un morceau de mon code, je l'ai posté ci-dessus. Si c'est gênant, peu importe, je trouverai un moyen.

 
Aliaksandr Hryshyn:
L'ordre est-il important ?
On copie de la dernière position à celle à supprimer, on redimensionne le tableau.

Non, l'ordre n'est pas important, il suffit de supprimer une entrée connue (trouvée par connaissance, l'index est connu). Il peut se trouver n'importe où dans le tableau (au début, au milieu, à la fin).ArrayRemove est génial, tout serait parfait, mais comment appliquer cette fonction à un tableau à deux dimensions ? le manuel est muet à ce sujet.

 
Sergey Voytsekhovsky:

Non, l'ordre n'est pas important, nous avons juste besoin de supprimer un enregistrement connu (trouvé par la cognition, l'index est connu). Il peut se trouver n'importe où dans le tableau (au début, au milieu, à la fin).ArrayRemove est très bien, tout serait parfait, mais comment appliquer cette fonction à un tableau à deux dimensions ? Il n'y a rien dans le manuel à ce sujet.

Donc faites comme je l'ai dit, seul le tableau de la deuxième dimension est copié.
Lorsque vous redimensionnez un tableau, spécifiez également un troisième paramètre, par exemple 32.
 
Sergey Voytsekhovsky:

Dans ce cas,ArrayRemove est plus approprié, il y a un exemple dans le manuel, il fonctionne exactement comme ceci

Le seul problème est que ces exemples et fonctions sont conçus pour des tableaux à une dimension, et qu'ils ne veulent pas fonctionner avec des tableaux à deux dimensions.

Je pense que je rate quelque chose de très important et de fondamental. Mais qu'est-ce que c'est ?

Je vous le dis, j'ai perdu le livre de référence.

C'est absurde. J'ai utilisé cette fonction sans lire le manuel. Dans le débogueur, j'ai vu comment l'élément était supprimé et la taille du tableau était instantanément réduite. Je l'ai vérifié, cela fonctionne même avec un tableau de structures sans aucun problème. Maintenant, je ne peux pas travailler avec le code, mais seulement avec des mots : Par exemple, je veux supprimer le 3ème indice d'un tableau à 2 dimensions. Il s'avère que les cinquième et sixième valeurs doivent être supprimées. Lors de la copie, la fonction organise toutes les valeurs dans un tableau unidimensionnel et il s'avère que la troisième paire commence à l'indice 5. En général, on s'en rend compte après quelques expériences.

Quant à ArrayRemove, je le testerai dès que possible sur des tableaux à 2-4 dimensions. Par manque de besoin, je ne l'ai jamais testé et je ne me suis pas douté qu'il ne fonctionnait pas.


Ajouté :

Vérifié. N'oubliez pas que vous ne pouvez pas redimensionner un tableau statique. C'est pourquoi dans l'exemple de la documentation, la taille du tableau reste la même et les deux dernières chaînes sont répétées. Lorsque vous supprimez des lignes d'un tableau dynamique, la taille change sans problème.

Le manuel doit être frotté aux trous :)))) dans le moniteur.

/********************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

Voici le tableau tridimensionnel et le résultat :

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:

C'est n'importe quoi. J'ai utilisé cette fonction sans lire le manuel. Dans le débogueur, j'ai vu comment l'élément est supprimé et la taille du tableau est instantanément réduite. Vérifié, même sur un tableau de structures fonctionne sans problèmes. Maintenant, je ne peux pas travailler avec le code, mais seulement avec des mots : Par exemple, je veux supprimer le 3ème indice d'un tableau à 2 dimensions. Il s'avère que les cinquième et sixième valeurs doivent être supprimées. Lors de la copie, la fonction organise cependant toutes les valeurs dans un tableau unidimensionnel et il s'avère que la troisième paire commence à l'indice 5. En général, on s'en rend compte après quelques expériences.

Quant à ArrayRemove, je le testerai dès que possible sur des tableaux à 2-4 dimensions. Par manque de besoin, je ne l'ai jamais testé et je ne me suis pas douté qu'il ne fonctionnait pas.


Ajouté :

Vérifié. N'oubliez pas que vous ne pouvez pas redimensionner un tableau statique. C'est pourquoi dans l'exemple de la documentation, la taille du tableau reste la même et les deux dernières chaînes sont répétées. Lorsque vous supprimez des lignes d'un tableau dynamique, la taille change sans problème.

Le répertoire doit être scrubbé vers les trous :)))) dans le moniteur.

Ici j'ai fait un tableau à 3 dimensions et le résultat :

Votre exemple est très lent, avec un grand nombre de valeurs, cela sera perceptible.
 
Aliaksandr Hryshyn:
Votre exemple est très lent, avec un grand nombre de valeurs, cela sera perceptible.

Avec beaucoup de quoi ? Des éléments de tableau qui ne sont même pas remplis à chaque tic ? Comment sera-t-il perceptible ?