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) を試します。正しい数字がない場合は、おそらく前のセルで誤りを犯した可能性があります (したがって、バックトラックします)。そこに有効な数字がない場合は、前のフィールドに再度移動します。有効な数字が見つかった場合は、次の数字に再び移動します。