如何跳过Rust迭代器中的第N个元素?

eis*_*man 6 iterator skip rust

迭代器有一个skip跳过第一个n元素的方法:

let list = vec![1, 2, 3];
let iterator = list.iter();
let skip_iter = iterator.skip(2); //skip the first 2 elements
Run Code Online (Sandbox Code Playgroud)

我找不到一个方法只跳过n迭代器中的-th元素.我是否需要自己实现某些功能,或者我找不到某个方法?

E_n*_*ate 10

这似乎是一个非常具体的操作.标准库或包中没有适配器itertools.

尽管如此,它仍然很容易实现.可以枚举每个元素并过滤索引:

iter.enumerate().filter(|&(i, _)| i != n).map(|(_, v)| v)
Run Code Online (Sandbox Code Playgroud)

操场


use*_*064 8

我偏爱这个filter_map版本

fn main() {
    let v = vec![1, 2, 3];
    let n = 1;
    let x: Vec<_> = v.into_iter()
        .enumerate()
        .filter_map(|(i, e)| if i != n { Some(e) } else { None })
        .collect();
    println!("{:?}", x);
}
Run Code Online (Sandbox Code Playgroud)

操场

  • 仅使用“filter”的解决方案返回包含索引的元组,这将返回不带索引的基础元素。这取决于你想要什么结果 (3认同)