获取二维数组中的上一项

时间:2013-03-10 16:31:53

标签: c# multidimensional-array iterator

如何轻松获取二维数组中的上一个(和下一个)项? 我知道你可以使用:

进行迭代
 for (byte x = 0; x < grid.GetLength(0); x++) 
 {
   for (byte y = 0; y < grid.GetLength(1); y++) 
   {
        //Here I should get previous item if certain bool returns false
   }
 }

我可以做y--。但是,如果yx行中的第一个元素,该怎么办?然后是y = (getLength(1) -1)x--。这看起来有点复杂:s

由于我的数组包含自定义类型“Field”的元素,因此我尝试使用以下代码创建previousField属性:

    Field previousField = null;
    foreach (Field field in this.Grid)
    {
        field.PreviousField = previousField;

        previousField = field;
    }

但是,这不适用于'for'循环迭代。因为我现在以2种完全不同的方式迭代&gt;&lt;。我不知道如何创建一个nexField属性。

那么,如何创建nextField属性?如果不可能,我如何在数组中前后迭代?我需要一个数组,因为我需要在代码的其他部分使用索引。

编辑:示例;

我正在使用回溯算法制作数独游戏。 2D数组表示网格(例如9x9)。所以我遍历数组,插入随机数字(利用乐观,'这应该没问题,否则,我们会回去改变)。

插入数字时,我会验证数字是否正确(在块,行和列中是唯一的)。我尝试所有可能的数字(1-9)。如果没有正确的数字,那么我可能在前一个单元格中出错(所以我回溯)。如果那里没有有效数字,则再次转到上一个字段。如果找到有效数字,那么我再次转到下一个数字。

1 个答案:

答案 0 :(得分:3)

如果您只需要此迭代的前一个字段,则可以在循环中跟踪它。像这样:

Field previous = null;
for (byte x = 0; x < grid.GetLength(0); x++) 
{
    for (byte y = 0; y < grid.GetLength(1); y++) 
    {
         //Here I should get previous item if certain bool returns false
         // ....
         previous = grid[x,y];
    }
}