[英]Fast sum of values in a multidimensional array (C#)
使用1D數組,我可以使用sum方法來獲取所有值的總和。
int[] array = {6,3,1};
Console.WriteLine(array.Sum());
使用多維數組(在我的情況下為3D),這是不可能完成的。 顯然我可以全力以赴,但這看起來很冗長,我懷疑它會表現得很糟糕。
有沒有辦法壓扁陣列? 還是一個很好的方式來得到我沒見過的總和?
Sum完全是foreach
。 他們背后沒有魔力。 如果你是這樣的性能餓使用for
代替foreach
。 您也可以並行執行此操作,此操作可以輕松並行化。
這就行了。
var i = array.SelectMany(j => j).Sum()
你可以像這樣在.net 4中並行化這個
var i = array.AsParallel().SelectMany(k => k).Sum();
為什么foreach
表現不好? 您必須至少讀取一次每個值才能計算總和。 沒有辦法解決這個問題(當然,假設是“隨機”值)。 所以也許有更美的方式,但不是更高效的方式(用大O來說 )。
如果你有一個鋸齒狀的數組,並希望你可以使用干凈的代碼
int[][] array = { new []{ 6, 3, 1 }, new []{ 6, 3, 1 } };
Console.WriteLine(array.Sum(i => i.Sum()));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.