【发布时间】:2017-11-16 17:41:48
【问题描述】:
我是 scala 的新手,我正在尝试用我现有的列表创建一个列表。
我的当前列表
val votesByLang: scala.collection.immutable.Map[String,Seq[(String, Int)]] = Map(pythom -> List((pythom,10)), scala -> List((scala,1), (scala,10), (scala,1)), java -> List((java,4)))
votesByLang.map{
case (witch,counts) => (witch,counts.foldLeft(0)((x,y)=>x+y))
}.toSeq
这给出了一个错误:
<console>:13: error: overloaded method value + with alternatives:
(x: Int)Int <and>
(x: Char)Int <and>
(x: Short)Int <and>
(x: Byte)Int
cannot be applied to ((String, Int))
votesByLang.map{case (witch,counts)=>(witch,counts.foldLeft(0) ((x,y)=>x+y))}.toSeq
但如果我将 _ 用于任何相同的工作正常并产生结果
votesByLang.map{
case (witch,counts) => (witch,counts.foldLeft(0)((_+_._2)))
}.toSeq
结果: Seq[(String, Int)] = Vector((pythom,10), (scala,12), (java,4))
第一种方法有什么问题
【问题讨论】:
-
您在第一个版本中缺少
_2(在(String, Int)中返回Int)。 -
是的,你是对的,所以第一个对象 x 是一个累加器,第二个是数字列表,所以 votesByLang.map{case (witch,counts)=>(witch,counts.foldLeft(0) ((x:Int,y)=>x+y._2))}.toSeq
-
@Marth 在我们的 map 函数中 counts 是 Int 并且我们在 counts 上调用 foldLeft 所以理想情况下它 y 变量应该是 Int 而不是 List 对吧?
-
y不是List而是一个元组(String, Int)(参见Seq的类型(Map中的值)。
标签: scala