我在F#中創建了一個棋盤(類型)遊戲,並且在「功能」方式中遇到了一些麻煩。穿越F#2D陣列
我有一個數組,看起來,例如,像:
val myArray : int [,] = [[1; 1; 0; 0; 0]
[0; 0; 1; 0; 0]
[2; 0; 0; 0; 3]
[0; 0; 0; 0; 0]
[0; 1; 0; 0; 1]]
我想基於上述,創建一個新的數組,其中:
- 如果該項目是> 0,然後將新的陣列中應該是多少1
- 如果該項目是= 0,則:
- 如果向左或向右或高於或低於一個項目是> 1,則在新的ARRA y中的數目應爲2
- 否則,如果到的右側或上方或下方左邊的項爲= 1,則新的數組的數量應爲3
- 否則,數應爲4
這應該創建一個新的陣列,它看起來像:
val myArray : int [,] = [[1; 1; 3; 4; 4]
[2; 3; 1; 3; 2]
[1; 2; 3; 2; 1]
[2; 3; 4; 4; 2]
[3; 1; 3; 3; 1]]
我看不到在實現這一目標的F#什麼簡單的辦法。在C#中,我只是創建了一個for
循環來做到這一點,但我認爲在F#中使用map
函數 - mapi
看起來很有前途,但它似乎只能訪問當前塊在考慮和其指數,而不是整個陣列...
我的問題似乎是遊戲的規則是依賴於周邊地區,而標準的遍歷方法似乎並沒有給予周圍區域 - 實現我在做什麼的最佳方式是什麼?
這看起來完全像我所需要的,而且看起來更像F#,而不像我創建的那樣......雖然我的解決方案非常相似,但我創建了一個全是零的新數組,然後有一個嵌套for循環遍歷原始數組。我也沒有使用這個列表理解的東西,所以我可能並沒有那麼接近這個想法...... – 2011-04-27 09:52:23