所以我有一个像这样的数字
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读取等等......
我怎样才能做到这一点?
答案 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]);
}
}