2013-06-19 28 views
0

以下代碼是假設求和元組的列表的值,但是當兩個或多個元組包含相同的值,則元組僅僅是輸出一次:GROUPBY不表現爲預期

var data = List((1, "1") , (1, "one"))   //> data : List[(Int, java.lang.String)] = List((1,1), (1,one)) 

     data = data.groupBy(_._2).map { 
      case (label, vals) => (vals.map(_._1).sum, label) 
     }.toList.sortBy(_._1).reverse 

println(data)          //> List((1,1)) 

的輸出上面是List((1,1))當我期待List((1,1) , (1,"one"))

是否需要調整groupBy函數參數來解決這個問題?

+0

你如何期望得到'(1,「two」)'?這沒有意義。 –

+0

此鏈接可能有用:[scalapuzzlers N6](http://scalapuzzlers.com/#pzzlr-006) – senia

回答

3

實際上,它的行爲與預期相同。 groupBy返回地圖。當你在地圖上創建一個新地圖時,當然每個關鍵字都是唯一的。在這裏,您將有密鑰1兩次...

然後您應該在致電map之前致電toList,而不是之後。