F#将bool的多维数组传递给函数

时间:2011-04-10 21:38:59

标签: f#

如何将多维数组的bool传递给F#中的函数?谢谢 Maybettle

1 个答案:

答案 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#会自动转换外部类型(而不是元素)。