如何将多维数组的bool传递给F#中的函数?谢谢 Maybettle
答案 0 :(得分:5)
根据您使用的是实际的2D数组(矩形数组)还是锯齿状数组(元素为数组的数组,长度可能不同),有两种选择:
如果您不确定使用哪一个,那么最好知道锯齿状阵列更快,但使用矩形阵列可能更容易(因为您确定尺寸)。
let foo (ar:bool[,]) = ar.[0, 0] // Get element at specified coordinates
let bar (ar:bool[][]) = ar.[0].[0] // Get first array and then the element
要调用这两个函数,可以使用以下语法:
// Create array of arrays and call the function
bar [| [| true |] |]
// Creates array of arrays and converts it to multi-dimensional array
// You can also use plenty of functions from 'Array2D' module
foo (array2D [| [| true |] |])
如果要编写更通用的函数,还可以使用序列序列。这将仅与锯齿状数组兼容,但您也可以使用此功能,例如列表或任何.NET集合类型的F#列表。
let woo (ar:seq<#seq<bool>>) = Seq.head (Seq.head ar)
#seq<..>
类型意味着它可以是序列或任何其他派生类型。这是元素类型所必需的,但不适用于外部类型,因为F#会自动转换外部类型(而不是元素)。