小编mrb*_*007的帖子

为什么双反转迭代器的行为好像从未被逆转过?

我有一个包含数字的输入向量.在输出向量中,我需要以从右到左的顺序获得一系列部分乘积.输出的最后一个元素必须等于输入中的最后一个元素; 输出的倒数第二个元素必须是输入的最后一个和倒数第二个元素的乘积; 等等.例如,如果输入向量是

let input = vec![2, 3, 4];
Run Code Online (Sandbox Code Playgroud)

然后我需要输出[24, 12, 4].

我的实现在输入上使用迭代器,反转它,maps,再次反转和collects:

fn main() {
    let input = vec![2, 3, 4];
    let mut prod = 1;
    let p: Vec<usize> = input
        .iter()
        .rev()
        .map(|v| {
            prod *= v;
            prod
        }).rev()
        .collect();
    println!("{:?}", p);
}
Run Code Online (Sandbox Code Playgroud)

结果[2, 6, 24]就像我删除两个rev()s一样.两人rev()没有解决问题,他们只是"歼灭"对方.

这个任务是否可以在"调用链"样式中解决,而不使用for

rust

8
推荐指数
1
解决办法
191
查看次数

标签 统计

rust ×1