2009-03-13 2 views

ответ

21

SelectMany - оператор проекции, метод расширения, предоставляемый пространством имен System.Linq.

Он выполняет от одного до многих элементов проекцию над последовательностью, позволяя вам «сгладить» полученные последовательности в одну.

Вы можете использовать его таким образом:

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

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

точке педанта; это не то, что я бы назвал двумерным массивом - это зубчатый массив ... –

+0

@MarcGravell Разве это не 2D-массив с зубцами? Очевидно, что зубчатый массив не является прямоугольным массивом или массивом «куб». Но он все еще имеет степень измерения. Сказать, что 2D-массив не указывает зубчатый или геометрический/прямой. – barlop

+0

@barlop возможно, но в конечном итоге «массив» здесь будет относиться к внешнему массиву, который является вектором ссылок; ясность действительно дает понять, что она сложнее, и я согласен с тем, что в некотором смысле «2D» можно было бы использовать, в отличие от, например, «int [] [] []'. В конечном счете, именование жестко :) –

41

Если вы имеете в виду неровными массив (T[][]), SelectMany является вашим другом. Однако, если вы имеете в виду прямоугольного массив (T[,]), то вы можете просто перечислить данные о дате по foreach - или:

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

Эта статья, http://stackoverflow.com/questions/5132397/fast-way-to-convert-a-two-dimensional-array-to-a-list-one-dimensional, подробно описывает метод foreach а также некоторые показатели производительности. – ShawnFeatherly

Смежные вопросы