-1

2 次元配列の前の (および次の) アイテムを簡単に取得するにはどうすればよいですか? 次を使用して反復できることを知っています:

 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

私の配列にはカスタムタイプ「Field」の要素があるため、次のコードを使用して previousField プロパティを作成しようとしました:

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

        previousField = field;
    }

ただし、これは「for」ループの反復では機能しません。私は今、2つのまったく異なる方法を繰り返しているので><。nexField プロパティの作成方法がわかりません。

では、nextField プロパティを作成するにはどうすればよいでしょうか。不可能な場合、配列を前後に反復するにはどうすればよいですか? コードの他の部分でインデックスを使用する必要があるため、配列が必要です。

編集:例;

バックトラックアルゴリズムを使って数独を作っています。2D 配列はグリッド (たとえば 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 に答える