当前位置 : 主页 > 手机开发 > 无线 >

返回由Vec迭代器产生的元素移动窗口

来源:互联网 收集:自由互联 发布时间:2021-06-10
我试图弄清楚如何从我第一次过滤的矢量中返回一个元素窗口而不将其复制到新的矢量. 所以这是天真的方法,它工作正常,但我认为最终将从第5行分配一个新的向量,我真的不想这样做
我试图弄清楚如何从我第一次过滤的矢量中返回一个元素窗口而不将其复制到新的矢量.

所以这是天真的方法,它工作正常,但我认为最终将从第5行分配一个新的向量,我真的不想这样做.

let mut buf  = Vec::new();
file.read_to_end(&mut buf);
// Do some filtering of the read file and create a new vector for subsequent processing
let iter = buf.iter().filter(|&x| *x != 10 && *x != 13);
let clean_buf = Vec::from_iter(iter);
for iter in clean_buf.windows(13) {
    print!("{}",iter.len());
}

我可以使用chain()的替代方法?无需复制到新的Vec即可实现同样的目标

for iter in buf.iter().filter(|&x| *x != 10 && *x != 13) {
    let window =  ???       
}
您可以使用 Vec::retain而不是过滤器,这样可以保留您的Vec:

fn main() {
    let mut buf = vec![
        8, 9, 10, 11, 12, 13, 14,
        8, 9, 10, 11, 12, 13, 14,
        8, 9, 10, 11, 12, 13, 14,
    ];
    println!("{:?}", buf);
    buf.retain(|&x| x != 10 && x != 13);
    println!("{:?}", buf);
    for iter in buf.windows(13) {
        print!("{}, ", iter.len());
    }
    println!("");
}
网友评论