以不同的顺序读取多维数组

时间:2013-12-21 15:09:13

标签: c# multidimensional-array

所以我有一个像这样的数字

0 1 2 3

4 5 6 7

8 9 10 11

12 13 14 15

知道我想知道的是如何让它读取数字3之后的数字7和数字4之后的数字8.依此类推,如下:

0 -> 1 -> 2 -> 3
               |
               \/
4 <- 5 <- 6 <- 7
|
\/
8 -> 9 -> 10 -> 11
                  |
                  \/
12 <- 13 <- 14 <- 15

但是,如果我使用嵌套增量for,它将按正常顺序读取。

我不知道如何让它从3到7,4到8读取等等......

我怎样才能做到这一点?

3 个答案:

答案 0 :(得分:1)

您可以存储一个标志,指示下一次迭代是从左侧还是右侧开始。所以......

static void Main(string[] args)
{
    // initializing values
    int[,] arr = new int[4, 4];
    int n = 0;

    for (int i = 0; i < 4; i++)
    {
        for (int j = 0; j < 4; j++)
        {
            arr[i, j] = n++;
        }
    }

    n = 0;
    // initialization end

    // starts from the left
    bool left = true;
    // go line by line
    for (int i = 0; i < 4; i++)
    {
        // if it starts from the left, set start point a index 0
        // otherwise start from max index
        for (int j = left ? 0 : 3; left ? j < 4 : j >= 0; )
        {
            arr[i, j] = n++;

            // increment/decrements depending on the direction
            j = left ? j + 1 : j - 1;
        }

        // if it started from the left, the next iteration will
        // start from the right
        left = !left;
    }
}

结果:

初​​始化:

 0  1  2  3

 4  5  6  7

 8  9 10 11

12 13 14 15

导航后:

 0  1  2  3

 7  6  5  4

 8  9 10 11

15 14 13 12

答案 1 :(得分:1)

如果你有:

_arr = new int[,] { { 0, 1, 2, 3 }, { 4, 5, 6, 7 }, { 8, 9, 10, 11 }, { 12, 13, 14, 15 } };

然后尝试:

    public void PrintArr()
    {
        for (int i = 0; i < 4; i++)
        {
            if (i % 2 == 0)
            {
                for (int j = 0; j < 4; j++)
                    Console.Write(_arr[i, j] + " ");
                Console.WriteLine();
            }
            else
            {
                for (int j = 3; j >= 0; j--)
                    Console.Write(_arr[i, j] + " ");
                Console.WriteLine();

            }
        }
    }

答案 2 :(得分:0)

这是一个简短的解决方案:

int h = array.GetLength(0), w = array.GetLength(1);
for(int i = 0, j = 0, c = 1; i < h; i++, c = -c, j += c)
{
    for(int k = 0; k < w; k++, j += c)
    {
        Console.WriteLine(array[i, j]);
    }
}