我有一个3d数组double[][][] arr
,它实际上是double[][] matrix
的数组,我想要对数组中的所有矩阵求和,我打算写一个Sum函数,但我看到了这个函数,我不知道如何在多维数组中使用它,我不确定它是否是我正在寻找的。 p>
double[][][] m;
m.Sum<double>();
答案 0 :(得分:2)
问题在于它不能Sum<double>
,因为double[][][]
实现了IEnumerable<double[][]>
。所以你可以使用Aggregate
LINQ方法在这里找到两个解决方案:
1)编写方法double[][] AddMatrices(double[][] m1, double[][] m2)
,然后使用:
var result = arr.Aggregate(AddMatrices);
2)创建一个类Matrix
(或者只下载许多现有解决方案中的一个),该方法具有Add
方法,或者已经过载operator+
,然后类似地:
var result = arr.Aggregate(Matrix.Add);
后者当然是建议的,因为它是明确的,因此更具可读性。
并直接回答您的问题:没有Sum
没有多维等效的开箱即用,您可以看到its overload list in the documentation。
答案 1 :(得分:0)
double[][][] m = new double[2][][];
m[0] = new double[2][];
m[1] = new double[2][];
m[0][0] = new double[2];
m[0][1] = new double[2];
m[1][0] = new double[2];
m[1][1] = new double[2];
m[0][0][0] = 0;
m[0][0][1] = 1;
m[0][1][0] = 2;
m[0][1][1] = 3;
m[1][0][0] = 4;
m[1][0][1] = 5;
m[1][1][0] = 6;
m[1][1][1] = 7;
var summ = m.SelectMany(f => f.SelectMany(g => g)).Sum(); // summ = 28.0
double[, ,] n = new double[2, 2, 2];
n[0, 0, 0] = 0;
n[0, 0, 1] = 1;
n[0, 1, 0] = 2;
n[0, 1, 1] = 3;
n[1, 0, 0] = 4;
n[1, 0, 1] = 5;
n[1, 1, 0] = 6;
n[1, 1, 1] = 7;
var sumn = n.Cast<double>().Sum(); // sumn = 28.0