Как преобразовать 1D массив в 2D по главному столбцу - PullRequest
0 голосов
/ 11 мая 2011

говорят, что у меня есть 1D массив, как int[] x = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}.
Я хотел бы преобразовать его в 2D, где это выглядит так:

1 5  9 13  
2 6 10 14  
3 7 11 15  
4 8 12 16  

В настоящее время у меня есть

for (int i = 0; i < 4; i++)
{
    for (int j = 0; j < Nb; j++)
        s[i][j] = x[i + j];
}

Однако это не работает. Как бы я это сделал?

Ответы [ 3 ]

1 голос
/ 11 мая 2011

Я предполагаю, что паразитный 7 был опечаткой?

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

for i in (0..width)
   for j in (0..height)
      s[j][i] = x[i*height+j]

Отслеживание этого иллюстрирует, почему это работает:

s[0][0] = x[0*4+0] = x[0]
s[1][0] = x[0*4+1] = x[1]
...
s[0][1] = x[1*4+1] = x[5]
1 голос
/ 11 мая 2011

Попробуйте

for (int i = 0, k=0; i < 4; i++)
  for (int j = 0; j < Nb; j++)
    s[j][i] = x[k++]; // you may want s[i][j]
0 голосов
/ 11 мая 2011

Понятия не имею, что такое Nb, но вы далеко читаете исходный массив. Попробуйте что-то вроде этого:

for (int i = 0; i < 4; i++)
    for (int j = 0; j < 4; j++)
        s[j][i] = x[i*4 + j];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...