13

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?

Andrew Shepherd
  • 44,254
  • 30
  • 139
  • 205

1 Answers1

15

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...

Thomas Levesque
  • 286,951
  • 70
  • 623
  • 758