Estoy creando un juego de tablero (tipo) en F #, y estoy teniendo problemas para recorrer la matriz de una manera "funcional".Atravesar una matriz F # 2D
que tienen una matriz que se ve, por ejemplo, como:
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]]
quiero crear una nueva matriz basada en la anterior, donde:
- Si el artículo es> 0, a continuación, en la nueva matriz debe ser el número 1
- Si el artículo es = 0, entonces:
- Si un elemento a la izquierda o la derecha o por encima o por debajo es> 1, a continuación, en las nuevas arra y el número debe ser de 2
- lo contrario, si un elemento a la izquierda de la derecha o por encima o por debajo es = 1, entonces en la nueva matriz El número debe ser 3
- lo contrario, el número debe ser 4
esto debería crear una nueva matriz que se parece a:
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]]
no puedo ver ninguna manera simple en C# de lograr esto. En C# solo crearía un loop for
para hacer esto, pero pensé que podría haber una forma furtiva de hacerlo en F #, usando cosas como las funciones map
- mapi
parecía prometedor, pero parece que solo da acceso a la pieza actual bajo consideración y sus índices, no toda la matriz ...
Mi problema parece ser que las reglas del juego dependen del área circundante, mientras que los métodos de cruce convencionales no parecen dar acceso a los alrededores área: ¿cuál es la mejor manera de lograr lo que estoy haciendo?
Esto se ve exactamente como lo que necesito, y se parece mucho más a F # de lo que estaba creando ... Mientras que mi solución era bastante similar, creé una nueva matriz llena de ceros, luego tuve un ciclo anidado para iterar la matriz original. Tampoco estaba usando esa lista de cosas de comprensión, así que probablemente no estaba tan cerca de esto en absoluto como para pensarlo ... –