簡體   English   中英

獲取二維數組中的上一項

[英]Get previous item in 2 dimensional array

如何輕松獲得二維數組中的上一個(和下一個)項目? 我知道您可以使用以下方法進行迭代:

 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-- 在我看來,這有點復雜:

由於我的數組具有自定義類型'Field'的元素,因此我嘗試使用以下代碼創建previousField屬性:

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

        previousField = field;
    }

但是,這不適用於“ for”循環迭代。 由於我現在以2種完全不同的方式進行迭代> <。 我不知道如何創建nexField屬性。

那么,如何創建nextField屬性? 如果不可能的話,如何遍歷數組? 我確實需要一個數組,因為我需要在代碼的其他部分使用索引。

編輯:示例;

我正在使用回溯算法制作數獨。 2D數組代表網格(例如9x9)。 因此,我遍歷數組,插入隨機數(使用樂觀的方法,“這應該沒問題”,否則,我們將返回並進行更改)。

插入數字時,我驗證數字是否正確(塊,行和列中唯一)。 我嘗試所有可能的數字(1-9)。 如果沒有正確的數字,那么我可能在上一個單元格中出錯了(所以我回溯了)。 如果那里沒有有效的數字,則再次轉到上一個字段。 如果找到有效數字,那么我將再次轉到下一個數字。

如果您真的只需要先前的字段進行此迭代,則可以在循環中對其進行跟蹤。 像這樣:

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];
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM