Подтвердить что ты не робот

Преобразование индекса 1D массива в индекс 2D-массива

У меня есть 2 массива. Я хочу преобразовать индекс первого массива во второй. Есть ли лучший способ сделать это, чем то, что у меня ниже?

Array array1[9];
Array array2[3][3];

// Index is the index of the 1D array
public Point convert1Dto2D(int index)
{
        Point p = new Point();

        switch (index) {
            case 0:
                p.x = 0;
                p.y = 0;
                break;
            case 1:
                p.x = 0;
                p.y = 1;
                break;
            case 2:
                p.x = 0;
                p.y = 2;
                break;
            case 3:
                p.x = 1;
                p.y = 0;
                break;
            case 4:
                p.x = 1;
                p.y = 1;
                break;
            case 5:
                p.x = 1;
                p.y = 2;
                break;
            case 6:
                p.x = 2;
                p.y = 0;
                break;
            case 7:
                p.x = 2;
                p.y = 1;
                break;
            case 8:
                p.x = 2;
                p.y = 2;
                break;
        }

return p;
}
4b9b3361

Ответ 1

p.x = index / 3;
p.y = index % 3;

Ответ 2

Вы можете сделать это математически, используя модульное и целочисленное деление, поскольку ваш второй массив представляет собой массив 3x3, который будет выполняться следующим образом.

p.y = index % 3;
p.x = index / 3;

Ответ 3

Я предполагаю, что вы выполняете этот код в цикле? Если так

IEnumerable<Point> DoStuff(int length, int step) {
    for (int i = 0; i < length; i++)
        yield return new Point(i/step, i%step);
}

Назовите его

foreach (var element in DoStuff(9, 3))
    {
        Console.WriteLine(element.X);
        Console.WriteLine(element.Y);
    }

Ответ 4

На всякий случай, если кто-то интересуется Javascript.

var columnCount = 3
for(var i=0; i < 10; i++){
  var row = Math.floor(i/ columnCount )
  var col = i % columnCount 
  console.log(i, row, col)
}