Ошибка в limitLeft в карте? - PullRequest
0 голосов
/ 28 апреля 2018

Я пытаюсь добавить пары ключ-значение в 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

1 Ответ

0 голосов
/ 28 апреля 2018

Вы можете fold от одного типа к другому, но reduce является более ограничительным. Вы не можете уменьшить набор пар, типа (Int,Int), до одного типа Int.

Это работает, сводя набор пар к одной паре, а затем убирая 2-й элемент.

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