我将要用F#创建一个棋盘(类型)游戏,目前在以“函数式”的方式遍历数组方面有一些问题。
我的数组看起来像这样:
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,则在新数组中该数字应为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看起来很有前途,但它似乎只能访问当前正在考虑的部分及其索引,而不能访问整个数组...
我的问题似乎在于游戏规则取决于周围的区域,而标准遍历方法似乎无法访问周围的区域 - 有什么最好的方法来实现我所做的事情?