2016-05-24 85 views
2

我有一張地圖,代表成績冊,其中關鍵是成績,而數值是達到該成績的學生人數。根據斯卡拉地圖中的值計算平均值

我的地圖看起來是這樣的:

grades = Map("1" -> 0, "2" -> 0, "3" -> 0, "4" -> 0, "5" -> 0) 

然後我讀值從學生與他們的成績的列表中的鍵,其值填充0。

我現在要做的是計算平均品位:

val avg = grades.foreach{case (k,v) => k * v}/grades.foldLeft(0)(_+_._2) 

但問題是,

grades.foreach{case (k,v) => k * v} 

只返回()

+0

'grades.foldLeft(0)(_ + _._ 2)' - >'grades.values.sum' –

回答

3

嘗試:(還有其他的方法來做到這一點 - 我想堅持原來的流量)

val avg = grades.map{case (k,v) => k.toInt * v}.sum 
     /grades.foldLeft(0)(_+_._2).toFloat 

我改變你的代碼: 1.使用地圖,而不是的foreach 2。將k轉換爲整數 3.用浮點數除以得到浮點數答案

+0

完美工作,非常感謝! – dumm3rjung3

+0

很高興有人幫忙。請考慮接受我的回答:) –