2009-03-13 10 views
14

¿Qué es el método selectMany.ToArray()? ¿Es un método incorporado en C#?Convertir matriz 2 dimensiones

Necesito convertir una matriz bidimensional a una matriz unidimensional.

Respuesta

21

SelectMany es un operador de proyección, un método de extensión proporcionado por el espacio de nombres System.Linq.

Realiza una proyección de uno a muchos elementos sobre una secuencia, lo que le permite "aplanar" las secuencias resultantes en una.

Se puede utilizar de esta manera:

int[][] twoDimensional = new int[][] { 
             new int[] {1, 2}, 
             new int[] {3, 4}, 
             new int[] {5, 6} 
            }; 

int [] flattened = twoDimensional.SelectMany(x=>x).ToArray(); 
+9

punto pedante; eso no es lo que yo llamaría una matriz bidimensional: es una matriz dentada ... –

+0

@MarcGravell ¿No es una matriz dentada 2D? Claramente, una matriz irregular no es una matriz rectangular o una matriz "cubo". Pero todavía tiene un grado de dimensión. Decir que la matriz 2D no especifica irregular o geométrica/recta. – barlop

+0

@barlop quizás, pero finalmente "la matriz" aquí se referiría a la matriz externa, que es un vector de referencias; la irregularidad de hecho deja en claro que es más complejo, y estoy de acuerdo en que de alguna manera podría usarse "2D", en oposición a, por ejemplo, un 'int [] [] []'. En última instancia, nombrar es difícil :) –

41

Si se refiere a una matriz dentada (T[][]), SelectMany es su amigo. Sin embargo, si quieres decir una matriz rectangular (T[,]), a continuación, puedes enumerar los datos de la fecha a través de foreach - o:

int[,] from = new int[,] {{1,2},{3,4},{5,6}}; 
    int[] to = from.Cast<int>().ToArray(); 
+0

Este hilo, http://stackoverflow.com/questions/5132397/fast-way-to-convert-a-two-dimensional-array-to-a-list-one-dimensional, entra en detalles sobre cómo hacer el método foreach y también algunas métricas de rendimiento. – ShawnFeatherly

Cuestiones relacionadas