使用单个for循环填充C# 2D数组矩阵

4

我目前在处理2D数组。我希望用计数填充一个2D数组。我已经使用了两个嵌套的for循环来实现这一点。(这可能是最简单的方式,对吧?)

//create count
int count = 1;

for (int row = 0; row < matrix.GetLength(0); row++)
{
    for (int col = 0; col < matrix.GetLength(0); col++)
    {
        matrix[row, col] = count++;
    }
}

我很好奇,是否也有可能只使用一个for循环来填充这个2D数组呢?

我考虑使用一个循环计数行。当行达到数组的末尾时,列将增加1。这可能可以通过使用一些if、if else和else语句来完成,对吗?

这里是否有人知道如何使这个想法实现呢?


1
那段代码对于行和列大小不同的数组无法正常工作,因为它在两个地方都引用了 matrix.GetLength(0)。你应该将第二个调用更改为 matrix.GetLength(1) - stuartd
1
是的。您需要使用模算术。假设一个数组是8 x 8,您使用索引(i)从0到63。行号将是i / 8。列将是i%8。 - jdweng
只是为了好玩 int GetArrayValue(int row, int col, int colLength) { return (col * colLength) + row } - user9401448
2个回答

6

给你

int[,] matrix = new int[5, 10];     
int row = matrix.GetLength(0);
int col = matrix.GetLength(1);      

for (int i = 0; i < row * col; i++)
{
    matrix[i / col , i % col] = i + 1;
}

https://dotnetfiddle.net/Lv9DvT


1

是的,当然可以。

for(int i = 0; i < matrix.GetLength(0) * matrix.GetLength(1); i++)
{
    int row = i / matrix.GetLength(1);
    int column = i % matrix.GetLength(1);

    matrix[row, column] = i;
}

适用于NxN数组。


@fubo 为什么?你将遍历所有元素(4x4有16个元素),我们可以通过简单的数学计算得到列和行。 - Kevin Kouketsu
实际上我忘了两件事:处理NxN数组和填充数组。 - Kevin Kouketsu
这将填充列,然后递增行,OP 希望反过来,所以只需交换行和列。 - user9401448
1
我已经编辑了我的评论,并添加了只适用于NxN(四维数组)的内容。 - Kevin Kouketsu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接