Если к массиву применить ArrayResize, то что произойдёт с уже имеющимися значениями элементов массива?
- Очистка массива от заданного (ых) элементов
- [Архив!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 2.
- Помогите с массивами.
Не верно ставите вопрос. Все зависит от того в какую сторону происходит изменение размера массива. Если увеличение то имеющиеся данные сохранятся, если уменьшения, то часть данных будет потеряна.
Yury Kirillov:
Гораздо быстрее написать код и проверить, чем создавать тему на форуме...
то что не обрежется - сохранится
имевшиеся ранее элементы массива будут переживать бурные эмоции.
Уж лучше пример, чем гадать...
//+------------------------------------------------------------------+ //| 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
Файлы:
ArrayResize.mq5
4 kb
Vladimir Karputov:
Уж лучше пример, чем гадать...
и результат:
AsSeries будет влиять на результат?
Спасибо всем за комментарии, особенно Vladimir Karputov.
ArraySetAsSeries() на результат не влияет (если чо).
Vitalii Ananev:
Не верно ставите вопрос. Все зависит от того в какую сторону происходит изменение размера массива. Если увеличение то имеющиеся данные сохранятся, если уменьшения, то часть данных будет потеряна.
Не верно ставите вопрос. Все зависит от того в какую сторону происходит изменение размера массива. Если увеличение то имеющиеся данные сохранятся, если уменьшения, то часть данных будет потеряна.
Это для одномерного массива.
По просьбам трудящихся добавил в пример двумерный массив:
//+------------------------------------------------------------------+ //| 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
Файлы:
ArrayResize.mq5
6 kb
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь