La diferencia es que 'a[][]
representa una matriz de matrices (de posiblemente diferentes longitudes), mientras que en 'a[,]
, representa una matriz 2D rectangular. El primer tipo también se llama arrays dentados y el segundo tipo se llama matrices multidimensionales. La diferencia es la misma que en C#, por lo que es posible que desee consultar la documentación de C# para jagged arrays y multidimensional arrays. También hay una excelente documentación en el F# WikiBook.
Para demostrar esto utilizando una imagen, un valor de tipo 'a[][]
puede tener este aspecto:
0 1 2 3 4
5 6
7 8 9 0 1
Mientras que un valor de tipo a[,]
siempre será un rectángulo y puede verse, por ejemplo, así:
0 1 2 3
4 5 6 7
8 9 0 1
Para obtener una única "línea" de una matriz multidimensional, puede utilizar la notación rebanada:
let array1d = array2d.[0..0,0..9];;
Rebanadas de hecho regresar matriz multidimensional (en este caso, con una dimensión igual a 1), por lo que puede escribir una función de conversión que devuelve 'a[]
así:
let toArray (arr:_[,]) =
Array.init arr.Length (fun i -> arr.[0, i])
let array1d = array2d.[0..0,0..9] |> toArray;;