What is the idiomatic way to pop the last N elements in a mutable Vec?

后端 未结 3 1283
清歌不尽
清歌不尽 2021-01-17 11:42

I am contributing Rust code to RosettaCode to both learn Rust and contribute to the Rust community at the same time. What is the best idiomatic way to pop the last n

3条回答
  •  孤街浪徒
    2021-01-17 12:42

    I'd recommend using Vec::truncate:

    fn main() {
        let mut nums = vec![1, 2, 3, 4, 5];
    
        let n = 2;
        let final_length = nums.len().saturating_sub(n);
        nums.truncate(final_length);
    
        println!("{:?}", nums);
    }
    

    Additionally, I

    • used saturating_sub to handle the case where there aren't N elements in the vector
    • used vec![] to construct the vector of numbers easily
    • printed out the entire vector in one go

    Normally when you "pop" something, you want to have those values. If you want the values in another vector, you can use Vec::split_off:

    let tail = nums.split_off(final_length);
    

    If you want access to the elements but do not want to create a whole new vector, you can use Vec::drain:

    for i in nums.drain(final_length..) {
        println!("{}", i)
    }
    

提交回复
热议问题