LINUX.ORG.RU

Многомерные массивы поверх одномерных. Есть ли формулы?

 , ,


0

1

Мне не понравился такой метод создания динамических многомерных массивов как создание массива массивов. Их немного сложновато обслуживать и мне не нравиться обращение к нам [x][y], мне по нраву только [x,y]. Поэтому решил я написать обёртку. Для двумерных массивов я написал обёртку. А вот для массивов имеющих большее количество размерностей это несколько труднее. Поэтому я решил написать обёртку не над массивом массивов, а просто над одномерным массивом.

В функцию будет передавать массив n[>=0] содержащий координаты ячейки. Например 8,6,3. Размер массива к примеру 15*15*15 . При этом все индексы массивов начинаются с нуля. Какую математическую формулу использовать для того что бы сделать многомерный массив поверх одномерного? Количество измерений может быть любым допустимым и обращаться к надо как n[a], а одномерный массив ArrayOne[>=0].

☆☆☆

Последнее исправление: CYB3R (всего исправлений: 1)

А в чем проблема линеаризовать многомерный массив, если ты знаешь размерности?

buddhist ★★★★★
()

А обертку для двумерных массивов нельзя ли рекурсивно применить? Вроде так проще будет.

CARS ★★★★
()
Ответ на: комментарий от buddhist

Есть размерности: d1, ..., dN. Есть точка x1, ..., xN. Ее индекс в одномерном массиве будет равен I = (d1 * ... * dN-1) * xN + (d1 * ... * dN-2) * xN-1 + ... + x1.

Если ничего сходу не напутал

buddhist ★★★★★
()
Последнее исправление: buddhist (всего исправлений: 1)

Пусть размерность n x m x l, тогда

a[x,y,z]=odnomerniy[x*m*l+y*l+z]

dikiy ★★☆☆☆
()
Ответ на: комментарий от CARS

А обертку для двумерных массивов нельзя ли рекурсивно применить? Вроде так проще будет.

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

rezedent12 ☆☆☆
() автор топика
Ответ на: комментарий от nokachi

сделай на темплетах и запускай во время компиляции

Это как сделать?

rezedent12 ☆☆☆
() автор топика
Ответ на: комментарий от rezedent12

Двуменые массивы применяются часто, а вот уже 3-х меные - редко. Массив даже большей размерности 100% говорит нам что программер писавший это - индусодолбодятел. Почему так - предлагаю доффтыкать самому :)

anonymous
()
Ответ на: комментарий от anonymous

Двуменые массивы применяются часто, а вот уже 3-х меные - редко. Массив даже большей размерности 100% говорит нам что программер писавший это - индусодолбодятел. Почему так - предлагаю доффтыкать самому :)

Я хочу универсальный инструмент создать.

rezedent12 ☆☆☆
() автор топика
Ответ на: комментарий от anonymous

Массив даже большей размерности 100% говорит нам что программер писавший это - индусодолбодятел.

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

proud_anon ★★★★★
()
Последнее исправление: proud_anon (всего исправлений: 1)
Ответ на: комментарий от rezedent12

Я хочу универсальный инструмент создать.

Тогда соедени клизьму и зубную щётку.

Почему многомерные массивы за _реально_ редкими исключениями - суксЪ(С) понять ты не захотел ... Нее - лучше делай вышеописанный универсальный инструмент ...

anonymous
()
Ответ на: комментарий от anonymous

Почему многомерные массивы за _реально_ редкими исключениями - суксЪ(С) понять ты не захотел

Понять - не значит согласиться. А инструмент этот я хочу сделать «на всякий случай», вдруг я в своей RTS пересмотрю механику воздушного боя и орбитальных бомбардировок. И захочу сделать это всё в разреженном многомерном массиве где измерений будет более 3х. Всяко может случиться, поэтому я решил на всякий случай создать универсальный инструмент.

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

rezedent12 ☆☆☆
() автор топика

buddhist дал верную формулу. У меня такая же получилась независимо от него. Мог бы и сам придумать.

Nao ★★★★★
()
Ответ на: комментарий от rezedent12

в разреженном

Сразу бы дал такое уточнение. Тут тогда лучше какими-нибудь хэш-таблицами пользоваться

buddhist ★★★★★
()
Ответ на: комментарий от buddhist

Сразу бы дал такое уточнение. Тут тогда лучше какими-нибудь хэш-таблицами пользоваться

Это я потом сделаю.

rezedent12 ☆☆☆
() автор топика
Ответ на: комментарий от proud_anon

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

Тогда он возьмёт J, а не императивный язык не умеющий в многомерные массивы.

quantum-troll ★★★★★
()
Ответ на: комментарий от quantum-troll

Он же ученый а не наркоман :)

В отличие от нас с тобой

buddhist ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.