2012-10-13 61 views
6

我有0和1 Array2D:Array2D到陣列

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) 

但 '伯爵一' 是Array2D (不是數組),所以我只是想知道是否有一個標準的方法來將Array2D轉換爲數組?

回答

6

這裏有一個簡單的方法,使用[,]實現ienumerable<_>

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

,但如果你只需要計數你可以做的事實

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

爲0條款將不會增加您要計算的總和和條件僅爲1

6

從許多情況下,從Array2D轉換到Array的函數非常方便。

您可以保留在Array2D模塊中以方便使用。

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