我正在尝试使用Map
在reduceLeft()
中添加键值对,但收到错误。如果我使用foldleft()
添加键值对,我会得到正确的答案。这个错误在reduceLeft
中的含义是什么?正确的代码是什么?
代码:
object Dcoder extends App
{
var i = Map(1->2, 3->4, 5->6)
var o = i.reduceLeft((a,b) => a._1 + b._1)
println(o)
}
错误:
source_file.scala:9: error: type mismatch;
found : Int
required: (Int, Int)
var o=i.reduceLeft((a,b)=>a._1+b._1)
^
one error found
答案 0 :(得分:2)
您可以fold
从一种类型到另一种类型,但reduce
更具限制性。您无法将对的集合((Int,Int)
)缩减为单个类型Int
。
这可以通过将对的集合减少到单对,然后剥离第二个元素来实现。
Map(1->2, 3->4, 5->6).reduceLeft(_._1 + _._1 -> 0)._1 //res0: Int = 9