我有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的标准方法?
这是一个简单的方法,使用[,]实现的事实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
在许多情况下,从Array2D转换为Array的函数非常方便.
您可以将其保存在Array2D模块中以方便使用.
module Array2D =
let toArray (arr: 'T [,]) = arr |> Seq.cast<'T> |> Seq.toArray
Run Code Online (Sandbox Code Playgroud)