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?

1 Answer 1

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

Sign up to request clarification or add additional context in comments.

1 Comment

@StuartLC or just use for(int j = 0; j < jaggedArray[i].Length; j++) for the inner loop. I edited my answer.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.