通过两个对角线翻转阵列

时间:2015-10-14 20:36:19

标签: c# multidimensional-array

我正在寻找如何通过将数组传递给方法来通过它的两个对角线来翻转数组。我已经得到了它,所以我可以通过每个对角线单独翻转它,但我无法一步到位地完成这两项工作。

这是由主对角线翻转的阵列:

static int[,] flipDiag(int[,] originArray, int size)
{
    int[,] flippedArray = new int [size, size];


    for (int row = 0; row < size; row++)
    {
        for (int col = 0; col < size; col++)
        {
            flippedArray[row, col] = originArray[col, row];
        } 
    }

    return flippedArray;
}

这是通过另一条对角线翻转它的循环:

for (int row = 0; row < size; row++)
{
    for (int col = 0; col < size; col++)
    {
        flippedArray[row, col] = originArray[(size-1) - col, (size-1) - row];
    } 
}

有没有办法同时执行这两个操作,以便数组结构如下:

1 2 3
4 5 6
7 8 9

将输出到:

1 8 3
6 5 4
7 2 9

如果是这样,是否必须使用两个单独的循环来处理某种形式的临时变量或临时数组?

1 个答案:

答案 0 :(得分:2)

如果我理解正确,这段代码就是你想要的:(我用字母表示可读性。)

char[,] array =
{
    { 'A', 'B', 'C', 'D', 'E' },
    { 'F', 'G', 'H', 'I', 'J' },
    { 'K', 'L', 'M', 'N', 'O' },
    { 'P', 'Q', 'R', 'S', 'T' },
    { 'U', 'V', 'W', 'X', 'Y' },
};

char[,] flippedArray = (char[,])array.Clone();

for (int row = 0; row < 5; row++)
{
    for (int col = 0; col < 5; col++)
    {
        // wheter this isn't diagonal
        if (row != col && row + col != 4)
            flippedArray[row, col] = array[4 - row, 4 - col];
    }
}

它给出了这个输出:

A X W V E
T G R I P
O N M L K
J Q H S F
U D C B Y

当然,用相应大小的数组替换那些5和4。