Ответ 1
p.x = index / 3;
p.y = index % 3;
У меня есть 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;
}
p.x = index / 3;
p.y = index % 3;
Вы можете сделать это математически, используя модульное и целочисленное деление, поскольку ваш второй массив представляет собой массив 3x3, который будет выполняться следующим образом.
p.y = index % 3;
p.x = index / 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);
}
На всякий случай, если кто-то интересуется 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)
}