用c# LINQ编写的带有二维列表的函数

本文关键字:二维 函数 列表 LINQ | 更新日期: 2023-09-27 18:02:49

我想用c++写一个函数,返回一个Z*Y矩阵(Y>Z),语法简单:

double[Z][Y] Function (double[Y] vector){
    for (int i, i<Z, i++){
        for (int j, j<Y, j++){
            double[Z][Y] Tem[i][j] = vector[i]/vector[j];
        }
    }
    return Tem;
} 

现在我想用linq代替for loop翻译成C#语法(如何查询二维List),用二维List<List<double>>代替matrix。此外,如何声明具有给定大小的二维List,例如Z*Y ?

用c# LINQ编写的带有二维列表的函数

像这样?

List<List<double>> GetFactors(double[] vector, int limit){
     return vector.Take(limit).Select(i => vector.Select(j => i/j).ToList()).ToList(); 
} 

限制第一个维度为vector的第一个Z(本例中为limit)元素

vector.Take(limit)

为每一个值选择一个vector[i] / vector[j](共Y个元素)的列表

.Select(i => vector.Select(j => i/j).ToList()

返回所有list (list of list of double)

.ToList()

你可能想给j => i/j添加一些零处理,例如:

j => Math.Abs(j) < double.Epsilon ? i/j : 0.0