【问题标题】:Generate a two dimensional array via LINQ通过 LINQ 生成二维数组
【发布时间】:2010-12-19 08:46:25
【问题描述】:

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

这是我通过 LINQ 的做法

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

效果很好。

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

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

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

【问题讨论】:

    标签: linq multidimensional-array


    【解决方案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 查询中使用它...

    【讨论】:

    • @StuartLC 或仅使用 for(int j = 0; j &lt; jaggedArray[i].Length; j++) 进行内部循环。我编辑了我的答案。
    猜你喜欢
    • 2013-09-11
    • 2018-12-28
    • 2018-06-25
    • 1970-01-01
    • 2015-04-22
    • 2020-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多