rust 一种迭代器,它跳过、逐步执行并返回正确的索引

3z6pesqy  于 2023-01-21  发布在  其他
关注(0)|答案(1)|浏览(112)

我正在写一个程序,它需要一个迭代器,该迭代器从数组中的nth值开始,并按m步进,给出元素的正确索引(n + xm)。

fn main() {
    let mut test = [false; 10];

    for (index, val) in test.iter_mut().skip(3).step_by(2).enumerate() {
        *val = true;
        println!("{index} = true")
    }

    println!("{:?}", test)
}

// -> 
// 0 = true
// 1 = true
// 2 = true
// 3 = true
// [false, false, false, true, false, true, false, true, false, true]

给出了正确的元素(val),但索引(index)错误。例如,输出的第一行应该是3 = true。您能告诉我如何获得正确的index吗?
谢谢你,

szqfcxe2

szqfcxe21#

TL;DR:跳过前枚举
迭代器(实现Iterator的示例)上的操作是顺序的。它们的工作方式是惰性的,通过应用另一个类型调用inner的next,然后执行它自己的操作。我试图告诉你的是*操作的顺序很重要。有了这些知识,你现在可以把enumeration放在这个操作管道的开头:

test.iter_mut()
    .enumerate()
    .skip(3)
    .step_by(2)
    .for_each(|(index, val)| {
        *val = true;
        println!("{index} = true");
    });

相关问题