Про многомерные массивы с рангами измерений зависящих от старшего индекса

 

Хотелось бы иметь возможность работать со структурами типа A[I,i], где размерность индекса i зависит от I:

A[0,0] A[0,1] A[0,2]

A[1,0] A[1,1]

A[2,0] A[2,1] A[2,2] A[2,3] A[2,4] A[2,5] ... A[2, 100000]

A[3,0]

...

Мотивация очевидна - первый индекс нумерует некий объект, а второй - наборы однотипных данных, ассоциированных с объектом, при этом количество наборов зависит от объекта. Деревья и яблоки на них...

Понятно, что обычный массив не подходит, т.к. не хочется из-за, скажем, одной строки с сотней элементов считать, что у остальных их тоже сто.

Есть ли элегантное решение в рамках mql4? Кроме "ручками-ручками!"?

Буду рад, если решение уже появлялось на форуме и мне укажут на него.

 
qomment:

Хотелось бы иметь возможность работать со структурами типа A[I,i], где размерность индекса i зависит от I:

A[0,0] A[0,1] A[0,2]

A[1,0] A[1,1]

A[2,0] A[2,1] A[2,2] A[2,3] A[2,4] A[2,5] ... A[2, 100000]

A[3,0]

...

Мотивация очевидна - первый индекс нумерует некий объект, а второй - наборы однотипных данных, ассоциированных с объектом, при этом количество наборов зависит от объекта. Деревья и яблоки на них...

Понятно, что обычный массив не подходит, т.к. не хочется из-за, скажем, одной строки с сотней элементов считать, что у остальных их тоже сто.

Есть ли элегантное решение в рамках mql4? Кроме "ручками-ручками!"?

Буду рад, если решение уже появлялось на форуме и мне укажут на него.


По большому счету решить проблему можно, но красивого решения не найти. Два массива. В одном хранятся начало и конец, в другом сами значения

 

Например, забивать размер данных в первую ячейку., типа Array[0][0] = size0;

Ну а выделять память естественно по максимальной нужной длине.

Vinin:

По большому счету решить проблему можно, но красивого решения не найти. Два массива. В одном хранятся начало и конец, в другом сами значения

Как вариант, но очень негибко.

 
TheXpert:

Например, забивать размер данных в первую ячейку., типа Array[0][0] = size0;

Ну а выделять память естественно по максимальной нужной длине.

Как вариант, но очень негибко.


Так памяти может и не хватить просто
 
Спасибо. Кажется это и называется "ручками". При этом если, упаси Боже, нужно пополнить (или сократить) n-ю строку, надо пересчитывать всю адресацию...
 
А в MT5 такое наверное возможно?
 
qomment:
А в MT5 такое наверное возможно?
классы вам в руки:)
 
Есть базовый класс динамического массива, сделайте массив одномерных массивов, и будет вам Щастье.
 
Спасибо, видимо это оно. Осталось "всего ничего" - перейти на MT5, мне и брокеру :)
 
Есть еще один вариант. Если MQL4 поддерживает массив строк, то использовать его. В каждой строке определенное количество элементов - число, все количество-несколько чисел. Последние ненужные - не использовать. Т.о. получится 2х мерный массив. Только, придется писать функцию, делающую из набора символов-цифр число.
 
-Aleksey-:
Есть еще один вариант. Если MQL4 поддерживает массив строк, то использовать его. В каждой строке определенное количество элементов - число, все количество-несколько чисел. Последние ненужные - не использовать. Т.о. получится 2х мерный массив. Только, придется писать функцию, делающую из набора символов-цифр число.

Только надо не забывать про размер строки, а он довольно сильно ограничен. Да и скорость обработки будет очень-очень низкая
Причина обращения: