我在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