对于一维数组,我可以使用sum方法来获取所有值的总和。多维数组(C#)中值的快速求和
int[] array = {6,3,1};
Console.WriteLine(array.Sum());
对于多维数组(3D在我的情况),这是不能做到的。很明显,我可以对它进行全面的讨论,但这看起来很冗长,我怀疑它会表现糟糕。
有没有办法将阵列弄平?或者只是为了得到我没有看到的总和?
对于一维数组,我可以使用sum方法来获取所有值的总和。多维数组(C#)中值的快速求和
int[] array = {6,3,1};
Console.WriteLine(array.Sum());
对于多维数组(3D在我的情况),这是不能做到的。很明显,我可以对它进行全面的讨论,但这看起来很冗长,我怀疑它会表现糟糕。
有没有办法将阵列弄平?或者只是为了得到我没有看到的总和?
总和确实是foreach
。他们背后没有魔法。如果你是这么表现饥饿使用for
而不是foreach
。您也可以并行执行此操作,此操作可以很容易并行化。
+1,好点,并行化如果你可以@Tom Wright – 2010-06-22 12:10:04
也许这应该是一个单独的问题,但我该如何并行化呢? (对C#很新...) – 2010-06-22 12:12:52
看看这两个链接: http://msdn.microsoft.com/en-us/magazine/cc163329.aspx http://blogs.msdn.com/b/pfxteam/ 特别是在博客上,你可以下载一堆样本(ParallelExtensionsExtras) – 2010-06-22 12:19:14
为什么foreach
表现不好?您必须至少读取一次每个值才能计算总和。这是没有办法的(当然假设是“随机”值)。所以也许有更美丽的方式,但不是一个更高性能的方式(根据Big O)。
如果你有锯齿状排列,想干净的代码,你可以使用
int[][] array = { new []{ 6, 3, 1 }, new []{ 6, 3, 1 } };
Console.WriteLine(array.Sum(i => i.Sum()));
这会做的伎俩。
var i = array.SelectMany(j => j).Sum()
,你可以在.NET 4并行这种类似这样的
var i = array.AsParallel().SelectMany(k => k).Sum();
你在使用VS/DOTNET的版本,你可以使用LINQ? – 2010-06-22 12:03:34
@precq时代数组中的@Duke Duddridge没有做数据 – Andrey 2010-06-22 12:09:30