foldLeft в списке кортежей: странные неожиданные результаты - PullRequest
1 голос
/ 11 марта 2019

У меня есть список кортежей, элементы которых я хочу суммировать:

val t = Seq(1,2,3,4,5).map(el => (el,1))
t: Seq[(Int, Int)] = List((1,1), (2,1), (3,1), (4,1), (5,1))

t.foldLeft(0,0){ case ((a,b),(c,d)) => (a+b,c+d)}
res3: (Int, Int) = (14,6)

Ответ (14,6) действительно неожиданный (ожидаемый был (15,5)).

Что меня еще больше озадачивает:

t.foldLeft(0,1){ case ((a,b),(c,d)) => (a+b,c+d)}
res3: (Int, Int) = (15,6)

Мои вопросы: что соответствуют параметрам в foldLeft(x,y) (они являются параметрами инициации для 1-го и 2-го сгибов ???) и как получить желаемые суммы за 1-й?и 2-й элемент кортежа.

1 Ответ

7 голосов
/ 11 марта 2019

У вас есть ошибка в вашей функции сворачивания.Ваш аккумулятор находится в (a, b), а элемент находится в (c, d).Для суммирования необходимо вернуть (a + c, b + d)

...