Array2D到Array

dem*_*mas 7 f#

我有0和1的Array2D:

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

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

a |> Array.filter (fun x -> x == 1)
Run Code Online (Sandbox Code Playgroud)

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

Joh*_*mer 6

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

a |> Seq.cast<int> |> Seq.filter (fun x -> x == 1)
Run Code Online (Sandbox Code Playgroud)

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

a |> Seq.cast<int> |> Seq.sum
Run Code Online (Sandbox Code Playgroud)

因为0项不会增加总和,你想要计算的项只有1


pad*_*pad 6

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

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

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