Создайте двухмерный массив через LINQ

Я пытаюсь создать матрицу двойников, представляющую корреляцию между объектами.

Вот как я делаю это через LINQ

double[][] correlationsRaw = (from e in entitiesInOrder
                              select
                                (from f in entitiesInOrder
                                     select correlations.GetCorrelation(e, f)
                                ).ToArray()).ToArray();

Это прекрасно работает.

Но что я хочу - это двумерный массив (double [,]), а не зубчатый массив.

Очевидно, я могу написать некоторый вложенный цикл for, чтобы преобразовать один в другой.

Но есть ли какой-то элегантный трюк LINQ, который я могу использовать здесь?

Ответы

Ответ 1

Я не думаю, что есть простой способ прямого возвращения многомерного массива из запроса Linq... однако вы могли бы создать функцию, которая принимает зубчатый массив и возвращает многомерный массив:

public T[,] JaggedToMultidimensional<T>(T[][] jaggedArray)
{
    int rows = jaggedArray.Length;
    int cols = jaggedArray.Max(subArray => subArray.Length);
    T[,] array = new T[rows, cols];
    for(int i = 0; i < rows; i++)
    {
        cols = jaggedArray[i].Length;
        for(int j = 0; j < cols; j++)
        {
            array[i, j] = jaggedArray[i][j];
        }
    }
    return array;
}

Кстати, это может быть метод расширения, позволяющий использовать его в запросе Linq...