通过LINQ生成二维数组

时间:2009-11-23 04:58:31

标签: linq multidimensional-array

我正在尝试创建一个双精度矩阵,表示实体之间的相关性。

以下是我通过LINQ

进行的操作
double[][] correlationsRaw = (from e in entitiesInOrder
                              select
                                (from f in entitiesInOrder
                                     select correlations.GetCorrelation(e, f)
                                ).ToArray()).ToArray();

工作正常。

但我想要是一个二维数组( double [,] ),而不是锯齿状数组。

显然,我可以编写一些嵌套的 for 循环来将一个转换为另一个。

但是我可以在这里使用一些优雅的LINQ技巧吗?

1 个答案:

答案 0 :(得分:15)

我认为从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查询中使用它......