Если к массиву применить ArrayResize, то что произойдёт с уже имеющимися значениями элементов массива?

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Yury Kirillov
5298
Yury Kirillov  
  • 62% (41)
  • 9% (6)
  • 29% (19)
Всего проголосовало: 66
Vitalii Ananev
10605
Vitalii Ananev  
Не верно ставите вопрос. Все зависит от того в какую сторону происходит изменение размера массива. Если увеличение то имеющиеся данные сохранятся, если уменьшения, то часть данных будет потеряна.
Alexey Kozitsyn
8855
Alexey Kozitsyn  
Yury Kirillov:
Гораздо быстрее написать код и проверить, чем создавать тему на форуме...
Sofiia Butenko
14146
Sofiia Butenko  
то что не обрежется - сохранится
Maxim Kuznetsov
12957
Maxim Kuznetsov  

имевшиеся ранее элементы массива будут переживать бурные эмоции.

Vladimir Karputov
Модератор
182190
Vladimir Karputov  

Уж лучше пример, чем гадать...

//+------------------------------------------------------------------+
//|                                                  ArrayResize.mq5 |
//|                              Copyright © 2017, Vladimir Karputov |
//|                                           http://wmua.ru/slesar/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2017, Vladimir Karputov"
#property link      "http://wmua.ru/slesar/"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- объявим динамический массив
   double arr_dynamic[];
//--- новый размер в первом измерении массива
   if(ArrayResize(arr_dynamic,5)==-1)
     {
      Print("Ошибка ArrayResize");
      return;
     }

   for(int i=0;i<ArraySize(arr_dynamic);i++)
      arr_dynamic[i]=i;

//--- распечатка значений до увеличения размера
   Print("Перед ArrayResize массив имеет такие элементы:");
   ArrayPrint(arr_dynamic);

//--- увеличим размер на два элемента
   if(ArrayResize(arr_dynamic,ArraySize(arr_dynamic)+2)==-1)
     {
      Print("Ошибка ArrayResize");
      return;
     }
//--- распечатка значений после увеличения размера
   Print("После ArrayResize (увеличения размера) массив имеет такие элементы:");
   ArrayPrint(arr_dynamic);

//--- новый размер в первом измерении массива установим равным 3 (то есть уменьшим размер массива)
   if(ArrayResize(arr_dynamic,3)==-1)
     {
      Print("Ошибка ArrayResize");
      return;
     }
//--- распечатка значений после уменьшение размера
   Print("После ArrayResize (уменьшение размера) массив имеет такие элементы:");
   ArrayPrint(arr_dynamic);
  }
//+------------------------------------------------------------------+

‌и результат:

ArrayResize (USDJPY,M5) Перед ArrayResize массив имеет такие элементы:
ArrayResize (USDJPY,M5)   0.0 1.000 2.000 3.000 4.000
ArrayResize (USDJPY,M5) После ArrayResize (увеличения размера) массив имеет такие элементы:
ArrayResize (USDJPY,M5)    0.0  1.000  2.000  3.000  4.000 +0.000    0.0
ArrayResize (USDJPY,M5) После ArrayResize (уменьшение размера) массив имеет такие элементы:
ArrayResize (USDJPY,M5)   0.0 1.000 2.000


Файлы:
Yury Kirillov
5298
Yury Kirillov  
Vladimir Karputov:

Уж лучше пример, чем гадать...

‌и результат:



AsSeries будет влиять на результат?
Yury Kirillov
5298
Yury Kirillov  

Спасибо всем за комментарии, особенно Vladimir Karputov.

ArraySetAsSeries() на результат не влияет (если чо).  

Vladimir Karputov
Vladimir Karputov
  • www.mql5.com
Профиль трейдера
Alexey Volchanskiy
27267
Alexey Volchanskiy  
Vitalii Ananev:
Не верно ставите вопрос. Все зависит от того в какую сторону происходит изменение размера массива. Если увеличение то имеющиеся данные сохранятся, если уменьшения, то часть данных будет потеряна.

Это для одномерного массива.
Vladimir Karputov
Модератор
182190
Vladimir Karputov  

По просьбам трудящихся добавил в пример двумерный массив:

//+------------------------------------------------------------------+
//|                                                  ArrayResize.mq5 |
//|                              Copyright © 2017, Vladimir Karputov |
//|                                           http://wmua.ru/slesar/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2017, Vladimir Karputov"
#property link      "http://wmua.ru/slesar/"
#property version   "1.001"
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- объявим динамические массивы
   double arr_dynamic[];
   double arr_dynamic_multi[][2];
//--- новый размер в первом измерении массива
   if(ArrayResize(arr_dynamic,5)==-1)
     {
      Print("Ошибка ArrayResize for \"arr_dynamic\"");
      return;
     }
   if(ArrayResize(arr_dynamic_multi,5)==-1)
     {
      Print("Ошибка ArrayResize for \"arr_dynamic_multi\"");
      return;
     }

   for(int i=0;i<ArraySize(arr_dynamic);i++)
      arr_dynamic[i]=i;
   for(int i=0;i<ArrayRange(arr_dynamic_multi,0);i++)
     {
      arr_dynamic_multi[i][0]=i;
      arr_dynamic_multi[i][1]=i*10;
     }

//--- распечатка значений до увеличения размера
   Print("Перед ArrayResize массив \"arr_dynamic\" имеет такие элементы:");
   ArrayPrint(arr_dynamic);
   Print("Перед ArrayResize массив \"arr_dynamic_multi\" имеет такие элементы:");
   ArrayPrint(arr_dynamic_multi);

//--- увеличим размер на два элемента
   if(ArrayResize(arr_dynamic,ArraySize(arr_dynamic)+2)==-1)
     {
      Print("Ошибка ArrayResize for \"arr_dynamic\"");
      return;
     }
   if(ArrayResize(arr_dynamic_multi,ArrayRange(arr_dynamic_multi,0)+2)==-1)
     {
      Print("Ошибка ArrayResize for \"arr_dynamic_multi\"");
      return;
     }
//--- распечатка значений после увеличения размера
   Print("После ArrayResize (увеличения размера) массив \"arr_dynamic\" имеет такие элементы:");
   ArrayPrint(arr_dynamic);
   Print("После ArrayResize (увеличения размера) массив \"arr_dynamic_multi\" имеет такие элементы:");
   ArrayPrint(arr_dynamic_multi);

//--- новый размер в первом измерении массива установим равным 3 (то есть уменьшим размер массива)
   if(ArrayResize(arr_dynamic,3)==-1)
     {
      Print("Ошибка ArrayResize for \"arr_dynamic\"");
      return;
     }
   if(ArrayResize(arr_dynamic_multi,3)==-1)
     {
      Print("Ошибка ArrayResize for \"arr_dynamic_multi\"");
      return;
     }
//--- распечатка значений после уменьшение размера
   Print("После ArrayResize (уменьшение размера) массив \"arr_dynamic\" имеет такие элементы:");
   ArrayPrint(arr_dynamic);
   Print("После ArrayResize (уменьшение размера) массив \"arr_dynamic_multi\" имеет такие элементы:");
   ArrayPrint(arr_dynamic_multi);
  }
//+------------------------------------------------------------------+

и результат:

Перед ArrayResize массив "arr_dynamic" имеет такие элементы:
    0.0 1.00000 2.00000 3.00000 4.00000
Перед ArrayResize массив "arr_dynamic_multi" имеет такие элементы:
         [,0]     [,1]
[0,]      0.0      0.0
[1,]  1.00000 10.00000
[2,]  2.00000 20.00000
[3,]  3.00000 30.00000
[4,]  4.00000 40.00000
После ArrayResize (увеличения размера) массив "arr_dynamic" имеет такие элементы:
      0.0   1.00000   2.00000   3.00000   4.00000 -5.7E+296  +0.00000
После ArrayResize (увеличения размера) массив "arr_dynamic_multi" имеет такие элементы:
         [,0]     [,1]
[0,]      0.0      0.0
[1,]  1.00000 10.00000
[2,]  2.00000 20.00000
[3,]  3.00000 30.00000
[4,]  4.00000 40.00000
[5,] +0.00000 +0.00000
[6,] +0.00000 +0.00000
После ArrayResize (уменьшение размера) массив "arr_dynamic" имеет такие элементы:
    0.0 1.00000 2.00000
После ArrayResize (уменьшение размера) массив "arr_dynamic_multi" имеет такие элементы:
         [,0]     [,1]
[0,]      0.0      0.0
[1,]  1.00000 10.00000
[2,]  2.00000 20.00000
Файлы:
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий