Так, что-то я перегрелся, насколько я понял с помощью ArrayCopy() нельзя копировать в/из многомерных массивов?
Или я что-то не так делаю?
Нужно понимать, что функция копирует значеня отдного масива в другой...
Попробуйте так (хотя я бы лично сделак копирование самостоятельно при помощи цикла в отдельной функции)...
double arr[10][5], arr2[5]; ArrayCopy(arr,arr2);
В справке параметры указаны как одномерные массивы
ArrayCopy
Производит копирование одного массива в другой.
int ArrayCopy(
void dst_array[], // куда копируем
void src_array[], // откуда копируем
int dst_start=0, // с какого индекса пишем в приемник
int src_start=0, // с какого индекса копируем из источника
int cnt=WHOLE_ARRAY // сколько элементов
);
В справке параметры указаны как одномерные массивы
Например если так:
double arr[10][5], arr2[5]; ArrayCopy(arr2,arr[0]);
То компилируется нормально.
>Нужно понимать, что функция копирует значеня отдного масива в другой,
а не заполняет один массив единственным значением "базового массива"..
>Попробуйте так (хотя я бы лично сделак копирование самостоятельно при помощи цикла в отдельной функции)...
Я в курсе, мне нужно скопировать одномерный массив во второе измерение другого массива.
Я уже сделал по другому, но все же интересно как скопировать.
Например если так:
То компилируется нормально.
>Нужно понимать, что функция копирует значеня отдного масива в другой,
а не заполняет один массив единственным значением "базового массива"..
>Попробуйте так (хотя я бы лично сделак копирование самостоятельно при помощи цикла в отдельной функции)...
Я в курсе, мне нужно скопировать одномерный массив во второе измерение другого массива.
Я уже сделал по другому, но все же интересно как скопировать.
Масссив приемник ждя этой функции должен быть одномерный, источник в этом случае значения не играет
По этому этот код работает нормально (при этом 0 можно в цикле легко заменить на f = 0...9)
double arr[10][5], arr2[5]; ArrayCopy(arr2,arr[0]);
Вот этот код тоже нормально отработает (но данные можно будет перенести только в arr[0][5])
double arr[10][5], arr2[5]; double d; int f; for(f=0;f<5;f++) { if(f==0){arr2[f]=0;}else{arr2[f]=arr2[f-1]+1;} } ArrayCopy(arr,arr2); for(f=0;f<5;f++) { d = arr[0][f]; Print(d); }
PS
Если использовать два массива, один из которых многомерный нужно или использовать другую функцию или писать свою, копирующую данные в цикле.
Есть правда решение и без цикла, только тогда массив из которого данные копируются превращается в структуру, а массив куда они копируются становится одномерным с типом этой структуры (просто значение структуры присваивается определенному индексу массива).
Масссив приемник ждя этой функции должен быть одномерный, источник в этом случае значения не играет
По этому этот код работает нормально (при этом 0 можно в цикле легко заменить на f = 0...9)
Вот этот код тоже нормально отработает (но данные можно будет перенести только в arr[0][5])
PS
Если использовать два массива, один из которых многомерный нужно или использовать другую функцию или писать свою, копирующую данные в цикле.
Есть правда решение и без цикла, только тогда массив из которого данные копируются превращается в структуру, а массив куда они копируются становится одномерным с типом этой структуры (просто значение структуры присваивается определенному индексу массива).
Да подручными средствами (свои функции, циклы) я скопировал.
Просто хотелось бы копировать функцией ArrayCopy() в многомерный массив.
Ждем ответ разработчиков, можно будет или нет?
А то приходится для простой операции всякие костыли изобретать.
Да подручными средствами (свои функции, циклы) я скопировал.
Просто хотелось бы копировать функцией ArrayCopy() в многомерный массив.
Ждем ответ разработчиков, можно будет или нет?
А то приходится для простой операции всякие костыли изобретать.
Однозначно ответят что свое писать нужно (если уже готового нет, на что бы я не сильно надеялся)...
Может ещё подскажите как ?
Написал своё :
void copy(double &aa[][], int i,const double &bb[][],int s) { for(int j=0;j<10;j++) aa[i][j] = bb[s][j]; }
Ругается на передачу массивов : ']' - positive integer constant is expected
Может ещё подскажите как ?
Написал своё :
Ругается на передачу массивов : ']' - positive integer constant is expected
Нашёл на что ругается, сразу не мог найти тк это не логично.
Оказывается многомерные массивы при передаче по ссылке нужно описывать так же как и при объявлении те с указанием длинны статичных измерений.
void copy(double &a[][10], int i,const double &b[][10],int s) { for(int j=0;j<cell;j++) a[j][i]=b[j][s]; }
Не понятно зачем так сделано ведь компилятор по имени знает к какому массиву обращатся ? по моиму достаточно указать что массив многомерный и всё.
- www.mql5.com
Да, есть такое неудобство. Нужно заранее в функции объявлять размер второго измерения. Не получится поэтуму писать универсальные функции (для обработки массивов любых размеров). Придется использовать ООП. (помнишь, я просил тебя помочь сделать класс, который позволял бы работать с массивами произвольного размера?)
На MQL4 было бы достаточно писать например так:
CsvTo2D_Array(string nameFile, string Separator, double &array[0][0], int &StrAmount, int &ColumnAmount, bool &truth)
Зачем так сделано в MQL5 непонятно. Возможно в этом есть смысл, который мне не известен, может быть разработчики прояснят этот момент?
Зачем так сделано в MQL5 непонятно. Возможно в этом есть смысл, который мне не известен, может быть разработчики прояснят этот момент?
- www.mql5.com
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Или я что-то не так делаю?