-1

如何轻松获取二维数组中的上一个(和下一个)项目?我知道您可以使用以下方法进行迭代:

 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--。但是如果行y中的第一个元素x呢?然后y = (getLength(1) -1)x--。这对我来说看起来有点复杂:s

由于我的数组具有自定义类型“字段”的元素,因此我尝试使用以下代码创建一个 previousField 属性:

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

        previousField = field;
    }

但是,这不适用于“for”循环迭代。因为我现在正在迭代两种完全不同的方式><。我不知道如何创建一个 nexField 属性。

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

编辑:示例;

我正在使用回溯算法制作数独。二维数组表示网格(例如 9x9)。所以我遍历数组,插入随机数字(利用乐观,'这应该没问题',否则,我们将返回并更改)。

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

4

1 回答 1

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];
    }
}
于 2013-03-10T16:39:37.630 回答