C# 将一维数组索引转换为二维数组索引

C# 将一维数组索引转换为二维数组索引,c#,arrays,C#,Arrays,我有两个数组。 我想将第一个数组的索引转换为第二个数组。 有没有比下面的更好的方法 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:

我有两个数组。 我想将第一个数组的索引转换为第二个数组。 有没有比下面的更好的方法

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;
}

您可以使用模和整数除法进行数学运算,假设您的第二个数组是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);
}

以防有人对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)
}
var columnCount=3
对于(变量i=0;i<10;i++){
变量行=数学楼层(i/列数)
var col=i%列数
控制台日志(i、行、列)
}

@PeterOlson这有什么关系?@vexe我已经三年没有发表过这样的评论了,所以我不记得我到底在想什么。我想这更多的是因为传统而不是正确。它一直是,也将永远是
foreach (var element in DoStuff(9, 3))
    {
        Console.WriteLine(element.X);
        Console.WriteLine(element.Y);
    }
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)
}