C#,旋转二维数组

8

我看过其他关于旋转二维数组的帖子,但不完全符合我的要求。 我想要类似于这样的东西

 int[,] original= new int[4,2]
       {
           {1,2},
           {5,6},
           {9,10},
           {13,14}
       };

我希望将其旋转,如下所示, rotatedArray = {{1,5,9,13}, {2,6,10,14}}; 我想按列进行分析,而不是按行进行分析。
这样可以实现,但有更简单的方法吗?
 private static int[,] RotateArray(int[,] myArray)
  {
        int org_rows = myArray.GetLength(0);
        int org_cols = myArray.GetLength(1);

        int[,] myRotate = new int[org_cols, org_rows];

        for (int i = 0; i < org_rows; i++)
        {
            for(int j = 0; j < org_cols; j++)
            {
                myRotate[j, i] = myArray[i, j];
            }
        }

        return myRotate;
    }

有没有一种简单的方法在C#中迭代列?

如果您使用另一种数组方式 int[][] 而不是 int[,],那么会简单得多。 - Tigraine
1个回答

8

如果您将数组更改为数组的数组,则会变得更容易。我发现如果您将其更改为int [] []:

int[][] original = new[]
                                   {
                                       new int[] {1, 2},
                                       new int[] {5, 6},
                                       new int[] {9, 10},
                                       new int[] {13, 14}
                                   };

还有旋转方法:

private static int[][] Rotate(int[][] input)
{
    int length = input[0].Length;
    int[][] retVal = new int[length][];
    for(int x = 0; x < length; x++)
    {
        retVal[x] = input.Select(p => p[x]).ToArray();
    }
    return retVal;
}

谢谢Tigraine,我需要稍微修改我的调用函数,但没关系。 - user327764
我对它不是完全满意。但是,使用枚举器可以遍历两个维度的所有元素,这使得它有点更难。 - Tigraine
这对于 [][] 数组也适用,只需稍微修改一下调用使用 [][], 不过 [,] 使用起来更容易。我刚刚在谷歌上查了一下,显然 (出乎我的意料) [][] 比 [,] 更快。 - user327764
可能是因为涉及到确定内存地址的指针算术较少。由于 [1,2] = 1lengthdatatype_len+2datatype_len,而 int[] 只涉及 indexdatatype_len。 - Tigraine

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