Генерация двумерного массива через LINQ

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

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

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

Это отлично работает.

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

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

Но есть ли здесь какой-нибудь элегантный трюк с 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...

Другие вопросы по тегам