10

我的 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(不是 Array)所以我只是想知道是否有将 Array2D 转换为 Array 的标准方法?

4

2 回答 2

8

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

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

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

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

因为 0 项不会加到总和中,而您要计算的项只是 1

于 2012-10-13T06:21:21.317 回答
7

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

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

module Array2D =
    let toArray (arr: 'T [,]) = arr |> Seq.cast<'T> |> Seq.toArray
于 2012-10-13T07:47:10.970 回答