2009-03-13 24 views

Répondre

21

SelectMany est un opérateur de projection, une méthode d'extension fournie par l'espace de noms System.Linq.

Il effectue une projection d'un à plusieurs éléments sur une séquence, ce qui vous permet de "niveler" les séquences résultantes en une seule.

Vous pouvez l'utiliser de cette manière:

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

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

point pédant; ce n'est pas ce que j'appellerais un tableau bidimensionnel - c'est un tableau en dents de scie ... –

+0

@MarcGravell N'est-ce pas un tableau 2D déchiqueté? Il est clair qu'un tableau irrégulier n'est pas un tableau rectangulaire ou un tableau "cube". Mais il a encore un certain degré de dimension. Dire que le tableau 2D ne spécifie pas jagged ou geometric/straight. – barlop

+0

@barlop peut-être, mais finalement "le tableau" se référer ici à la matrice externe, qui est un vecteur de références; le caractère irrégulier indique clairement qu'il est plus complexe, et je suis d'accord avec le fait que, d'une certaine manière, "2D" pourrait être utilisé, par opposition à, disons, un int [] [] [] '. En fin de compte, nommer est difficile :) –

41

Si vous voulez dire un tableau en dents de scie (T[][]), SelectMany est votre ami. Si, cependant, vous dire un rectangulaire tableau (T[,]), alors vous pouvez simplement énumérer les données de date par foreach - ou:

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

Ce fil, http://stackoverflow.com/questions/5132397/fast-way-to-convert-a-two-dimensional-array-to-a-list-one-dimensional, va dans les détails de la méthode foreach et aussi quelques métriques de performance. – ShawnFeatherly