如何使用3D数组的Sum函数?

时间:2014-01-09 14:05:36

标签: c# arrays multidimensional-array

我有一个3d数组double[][][] arr,它实际上是double[][] matrix的数组,我想要对数组中的所有矩阵求和,我打算写一个Sum函数,但我看到了这个函数,我不知道如何在多维数组中使用它,我不确定它是否是我正在寻找的。

double[][][] m;
m.Sum<double>();

2 个答案:

答案 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