地图中reduceLeft出错?

时间:2018-04-28 19:04:09

标签: scala scala-collections

我正在尝试使用MapreduceLeft()中添加键值对,但收到错误。如果我使用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

1 个答案:

答案 0 :(得分:2)

您可以fold从一种类型到另一种类型,但reduce更具限制性。您无法将对的集合((Int,Int))缩减为单个类型Int

这可以通过将对的集合减少到单对,然后剥离第二个元素来实现。

Map(1->2, 3->4, 5->6).reduceLeft(_._1 + _._1 -> 0)._1  //res0: Int = 9