首页 > 解决方案 > 如何从迭代器循环内部跳过 n 个项目?

问题描述

这段代码:

fn main() {
    let text = "abcd";

    for char in text.chars() {
        if char == 'b' {
            // skip 2 chars
        }
        print!("{}", char);
    }
    // prints `abcd`, but I want `ad`
}

打印abcd,但如果找到,我想跳过 2 个字符b,以便打印ad. 我怎么做?

我试图将迭代器放入循环外的变量中并在循环内操作该迭代器,但借用检查器不允许这样做。

标签: rustiterator

解决方案


AFAIK 你不能用for循环来做到这一点。您需要手动对其进行脱糖:

let mut it = text.chars();
while let Some(char) = it.next() {
    if char == 'b' {
        it.nth(1); // nth(1) skips/consumes exactly 2 items
        continue;
    }
    print!("{}", char);
}

操场


推荐阅读