Чтобы получить частичные суммы последовательности целых чисел, я могу использовать scan()
на итераторе следующим образом:
let partial: Box<[u32]> =
list
.iter()
.scan(0, |st, elem| {
let ret = *st;
*st += elem;
Some(ret)
})
.collect();
Приведенный выше код работает хорошо, но я пытаюсь изменить его на дайте мне также общую сумму.
Что-то вроде:
let (partial, total): (Box<[u32]>, u32) =
list
.iter()
.scan(0, |st, elem| {
// TODO
})
.collect();
Похоже, мне просто нужно получить конечное значение st
, и итератор должен уже знать, что это ценность. Однако я не могу найти способ извлечь это значение, если не выполнять вторую итерацию по всей последовательности (например, с помощью fold()
).
Есть ли способ найти частичные суммы и общая сумма за один проход?