Array2D到Array

时间:2012-10-13 05:48:45

标签: f#

我的Array2D为0和1:

let rnd = System.Random()
let a = Array2D.init n n (fun i j  -> int(System.Math.Round(rnd.NextDouble() / index)) )

我需要计算'1'元素的数量,例如:

a |> Array.filter (fun x -> x == 1)

但是'a'是Array2D(不是数组)所以我只是想知道是否有将Array2D转换为数组的标准方法?

2 个答案:

答案 0 :(得分:6)

这是一种简单的方法,使用[,]实现ienumerable<_>

的事实
a |> Seq.cast<int> |> Seq.filter (fun x -> x == 1)

但是如果你只需要你可以做的计数

a |> Seq.cast<int> |> Seq.sum

因为0个术语不会添加到总和中,而您想要计算的术语只是1

答案 1 :(得分:6)

在许多情况下,从Array2D转换为Array的函数非常方便。

您可以将其保存在Array2D模块中以方便使用。

module Array2D =
    let toArray (arr: 'T [,]) = arr |> Seq.cast<'T> |> Seq.toArray