2011-06-11 148 views
1

我試圖做一個循環,將recurse通過字節數組,並將它們與數組中的下一個(大概使用循環遍歷每個條目)。如果兩者是相同的,我需要它增加一個int變量,然後繼續。如果兩者不一樣,則需要將int變量添加到列表中,然後再添加自己的字節值,然後需要「採用」這個新值作爲自己的值,然後重新開始整個過程​​直到數組結束。它是一個非常奇怪的事情,但它需要這樣做,所以我可以按正確的順序和正確的值將int/byte對寫入文件。需要幫助與奇怪的循環上的邏輯

這裏所關心的是獲取相同的連續條目數,記下它,然後轉到下一個值並重復。例如,如果我們遇到的值3與我們無關的值1相同。只要我們獲得價值3的連續條目數,我們就完成了我們的工作。

其他可能有幫助的一點。

  • 字節值在這種情況下可以跨越整個範圍0-255。
  • 數組大小可能高達1.5億字節,因此效率很重要。
  • 預先可以訪問數組大小。
  • 最後,字節數組是一個Struct中的字節變量。

我希望這是有道理的。提前致謝。

編輯:對不起,如果我以前不太清楚,也許我應該重新標題的問題。

爲了澄清,我明白我需要做什麼,而不是如何去做。所以我想我會怎樣循環這個比較,然後在我得到一個虛假的回報時換掉我比較的東西。最重要的是,當我比較可能有255個值時,我怎麼做,我不知道他們。我真的不知道如何編碼,所以我只是一直坐在那裏盯着VS :)

這是否更好理解?如果不是,我道歉:)

編輯2:這是我想出的最終結果,如果有人關心看看它。它受到了Aligray的代碼的啓發。

  int count = 0; 
      byte previous = tiles[0].TileTypeId; 
      List<int> typeCount = new List<int>(); 
      List<byte> type = new List<byte>(); 
      for (int i = 0; i < worldSize; i++) 
      { 
       byte current = tiles[i].TileTypeId; 
       if (previous == current) 
       { 
        count++; 
       } 
       else 
       { 
        typeCount.Add(count); 
        type.Add(previous); 
        previous = current; 
        count = 1; 
       } 
      } 
+2

聽起來像功課。 – Yrlec 2011-06-11 08:43:54

+0

你爲什麼要描述代碼而不顯示它?讓事情變得更容易.... – loxxy 2011-06-11 08:46:06

+0

我迷上了「採用新的價值作爲自己的」。更好地添加一個小的輸入和輸出樣本。和/或您的代碼到目前爲止。 – 2011-06-11 08:51:20

回答

1

如果我理解正確的問題,希望這將讓你開始:

int count = 0; 
byte previous = byteArray[0]; 
List<int> list = new List<int>(); 

for (int i = 1; i < byteArray.Length; i++) 
{ 
    byte current = byteArray[i]; 
    if (previous == current) 
    { 
     count++; 
    } 
    else 
    { 
     list.Add(count); 
     list.Add(Convert.ToInt32(current)); 
    } 

    previous = current; 
} 
+0

「它需要將int變量添加到列表中,後跟它自己的字節值」。我想你忘了添加字節值。代碼似乎很好。 – alex 2011-06-11 08:57:51

+0

@alex謝謝,修復它。 – aligray 2011-06-11 09:00:41

+1

很感謝您的快速回答。我要把這個標記爲答案,因爲它幾乎正是我想要的。看完之後,我知道我現在需要怎麼做。只需要一個視覺這個:)如果有人關心看到它,我會在後面發佈我的最終代碼。唯一需要注意的是字節值需要以字節的形式存儲在文件中。所以我認爲我會對列表1中的字節1進行處理,並且在寫入文件時只是前後交替。儘管如此,再次感謝您的靈感。 – Grimbly 2011-06-11 09:08:33