【问题标题】:C# fill 2D array matrix using single for loopC#使用单个for循环填充二维数组矩阵
【发布时间】:2019-04-28 01:42:18
【问题描述】:

我目前正在处理二维数组。我想用计数填充二维数组。我已经设法使用 2 个嵌套的 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 循环来填充这个二维数组?

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

这里有人知道如何完成这项工作吗?

【问题讨论】:

  • 该代码不适用于行和列大小不同的数组,因为它对两者都引用了matrix.GetLength(0)。你应该把第二个电话改成matrix.GetLength(1)
  • 是的。您将需要使用模块算术。假设一个数组是 8 x 8 并且您使用的索引 (i) 为 0 到 63。行号是 i/8。列是 i % 8。
  • 只是为了好玩int GetArrayValue(int row, int col, int colLength) { return (col * colLength) + row }

标签: c# arrays for-loop count


【解决方案1】:

给你

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

【讨论】:

    【解决方案2】:

    是的,当然可以。

    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 个元素),我们通过简单的数学得到列和行
    • 其实我忘记了两件事:使用 NxN 数组并填充数组。
    • 这会填充列然后增加行,OP希望它反过来所以只需交换行和列
    • 我已经编辑了我的评论,并添加了仅使用 NxN(四元阵列)的作品
    猜你喜欢
    • 2017-03-06
    • 2011-09-29
    • 2021-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-21
    相关资源
    最近更新 更多