2012-10-13 11 views
6

mam Array2D z 0 i 1:Array2D do Array

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

muszę obliczyć liczbę „1 'elementów, coś jak:

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

ale 'a' jest Array2D (nie Array) więc zastanawiam się, czy istnieje standardowy sposób przekształcenia Array2D w Array?

Odpowiedz

6

Oto jeden prosty sposób, wykorzystując fakt, że [,] implementuje ienumerable<_>

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

ale jeśli trzeba tylko liczyć można zrobić

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

jako 0 względem nie doda do suma i warunki, które chcesz zliczyć, to tylko 1

6

Funkcja przekształcania z Array2D na Array jest bardzo przydatna w wielu sytuacjach.

Możesz przechowywać go w module Array2D dla wygodnego użytkowania.

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