forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Алгоритмика (http://forum.boolean.name/forumdisplay.php?f=21)
-   -   трансформация 1D массива в nD массив (http://forum.boolean.name/showthread.php?t=16825)

foldel 23.05.2012 04:14

трансформация 1D массива в nD массив
 
Подскажите, как можно одномерный массив использовать в качестве многомерного?
Например есть массив int[] a = {1,2,3,4,5,6,7,8,9}. Надо реализовать функцию, которая даст мне индекс массива, в зависимости от измерения.
Припустим если представить этот массив в 1D, то getIndex(new int[]{2}) должно видать "3", а в 2D getIndex(new int[]{1,1}) "5" .

P.S. массив в аргументе функции:
длина - количество измерений(Dimension) массива,
елементы - индексы каждого измерения.

Mr_F_ 23.05.2012 05:34

Ответ: трансформация 1D массива в nD массив
 
если 2д индекс, то y*width+x
3д индекс соответственно
z*width*height + y*width+x

foldel 23.05.2012 13:36

Ответ: трансформация 1D массива в nD массив
 
Это я знаю... Но мне надо для n-мерного массива...

radiobutton 23.05.2012 14:31

Ответ: трансформация 1D массива в nD массив
 
входные данные:
int[] size - массив в котором размерности. Он известен заранее.
int[] val - массив в котором координаты нужного элемента.
Последний элемент size[size.Lenght-1] хоть в алгоритме и не используется, но он нужен будит для проверки, что val[i] < size[i].
Код:

public int GetIndex(int[] val)
{
int q=1;
int p=val[0];

for(int i=0;i<val.lenght-1;i++)
{
    q*=size[i];
    p+=q*val[i+1];
}
return Massiv[p-1];
}



Часовой пояс GMT +4, время: 02:12.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot