2014-12-04 87 views
0

我有一個名爲item的元組列表,列表中的每個索引都包含2 x Double s,斯卡拉foldLeft太多參數

item = ((1.0, 2.0), (3.0, 4.0), (10.0, 100.0)) 

我要將列表item內執行每個指標的計算,我想用foldLeft做到這一點。這是我的代碼:

item.foldLeft(0.0)(_ + myMethod(_._2, _._1, item.size))) 

_._2訪問當前item元組在索引1和_._1索引爲0例如訪問當前item元組第一個把它摺疊應該有效地:

item.foldLeft(0.0)(_ + myMethod(2.0, 1.0, item.size))) 

第二折:

item.foldLeft(0.0)(_ + myMethod(4.0, 3.0, item.size))) 

第三折:

item.foldLeft(0.0)(_ + myMethod(100.0, 10.0, item.size))) 

其中myMethod的:

def myMethod(i: Double, j:Double, size: Integer) : Double = { 
    (j - i)/size 
    } 

這是給我一個錯誤,說這個因爲它需要2個參數,所以foldLeft的參數太多。 myMethod返回Double,並且_Double。那麼,編譯器看到的這個額外參數在哪裏?

如果我這樣做:

item.foldLeft(0.0)(_ + _._1)) 

它在item每個索引總結了所有的第一Double秒 - 在item每個索引與_._ 2總結了所有的第二Double小號替換_._ 1 。

任何幫助,非常感謝!

回答

3

每個_相當於一個新的參數,所以(_ + myMethod(_._2, _._1, item.size))是一個具有3個參數的匿名函數:(x, y, z) => x + myMethod(y._2, z._1, item.size)

你想要的是(acc, x) => acc + myMethod(x._2, x._1, item.size)

+0

**謝謝**!我應該在4小時前問過。從Java背景來看,我正在艱難地抓住'_'。再次感謝你! – monster 2014-12-04 20:10:30

+0

我很高興它幫助:) – Dimitri 2014-12-04 20:12:25