Генерация двумерного массива через 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...