2014-06-17 59 views
0

如果我有這個簡單的循環是勢在必行的風格斯卡拉變化for循環可變聚集到不可變

val num = 100 
var result = 0.0 
for (i <- 0 until num) { 
    result += 4.0 * (1 - (i % 2) * 2)/(2 * i + 1) 
} 

我將如何將其更改爲不可變的功能?

+3

你試過問這裏之前,這個你自己解決?在詢問答案之前,粘貼您嘗試的代碼片段。我給你一個提示,你正在尋找一個'fold' – cdk

回答

8

你有一個初始值,你遍歷值的集合應用的操作每個項目最終能夠返回一個值。

這看起來很像是什麼東西,可以變成

+0

可能是值得提供不折疊的代碼,如果他從來沒有見過的摺疊:'(0到NUM).foldLeft(0.0){ (result,i)=> result + 4.0 *(1-(i%2)* 2)/(2 * i + 1)}'。 – KChaloux

0

另一種方法,與並行採集,

(1 to 100).par.map { i => 4.0 * (1 - (i % 2) * 2)/(2 * i + 1) }.sum