2012-10-13 310 views
6

que tienen Array2D de 0 y 1:Array2D a la matriz

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

necesito para calcular el recuento de '1'-elementos, algo así como:

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

Pero 'a' es Array2D (no Array) entonces me pregunto si existe una forma estándar de transformar Array2D en Array.

Respuesta

6

Esta es una manera fácil, usando el hecho de que [,] implementa ienumerable<_>

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

pero si sólo necesita el recuento se puede hacer

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

como los términos 0, no se sumarán a la suma y los términos que desea contar son solo 1

6

La función que se transforma de Array2D a matriz es muy útil en muchas situaciones.

Puede guardarlo en el módulo Array2D para un uso conveniente.

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