Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Generate a two dimensional array via LINQ

I am trying to create a matrix of doubles, representing a correlation between entities.

Here's how I'm doing it via LINQ

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

That works fine.

But what I want is a two dimensional array (double[,]), not a jagged array.

Obviously, I can write some nested for loop to convert one into the other.

But is there some elegant LINQ trick I can use here?

like image 387
Andrew Shepherd Avatar asked Nov 23 '09 04:11

Andrew Shepherd


1 Answers

I don't think there's an easy way of directly returning a multidimensional array from a Linq query... however you could create a function that takes a jagged array and return a multidimensional array :

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;
}

By the way, it could be an extension method, allowing you to use it in a Linq query...

like image 186
Thomas Levesque Avatar answered Oct 20 '22 19:10

Thomas Levesque