2009-03-13 23 views

Odpowiedz

21

SelectMany to operator rzutowania, metoda rozszerzenia zapewniona przez przestrzeń nazw System.Linq.

Wykonuje jedną do wielu projekcji elementu na sekwencji, co pozwala "spłaszczyć" wynikowe sekwencje w jeden.

Można używać go w ten sposób:

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

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

punkt pedant; to nie jest to, co nazwałbym dwuwymiarową tablicą - jest poszarpaną tablicą ... –

+0

@MarcGravell Czy to nie jest tablica 2D wyszczerbiona? Najwyraźniej poszarpana tablica nie jest tablicą prostokątną lub tablicą "kostki". Ale wciąż ma pewien wymiar. Aby powiedzieć, że tablica 2D nie określa postrzępionych lub geometrycznych/prostych. – barlop

+0

@barlop być może, ale ostatecznie "tablica" tutaj odnosi się do zewnętrznej tablicy, która jest wektorem odniesień; poszlak wyraźnie pokazuje, że jest bardziej złożony i zgodziłbym się, że w pewnym sensie można użyć "2D", w przeciwieństwie do, na przykład, "int [] [] []". Ostatecznie nazewnictwo jest trudne :) –

41

Jeśli oznaczać postrzępione array (T[][]) SelectMany jest twoim przyjacielem. Jeśli jednak masz na myśli prostokątny array (T[,]), a następnie można po prostu wyliczyć dane date poprzez foreach - czyli

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

Ten wątek, http://stackoverflow.com/questions/5132397/fast-way-to-convert-a-two-dimensional-array-to-a-list-one-dimensional, przechodzi w szczegóły wykonywania metody foreach a także niektóre wskaźniki wydajności. – ShawnFeatherly

Powiązane problemy