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

后端 未结 3 1285
清歌不尽
清歌不尽 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:44

    An alternate approach would be to use Vec::drain instead. This gives you an iterator so you can actually use the elements that are removed.

    fn main() {
        let mut nums: Vec = Vec::new();
        nums.push(1);
        nums.push(2);
        nums.push(3);
        nums.push(4);
        nums.push(5);
    
        let n = 2;
        let new_len = nums.len() - n;
    
        for removed_element in nums.drain(new_len..) {
            println!("removed: {}", removed_element);
        }
    
        for retained_element in nums {
            println!("retained: {}", retained_element);
        }
    }
    

    The drain method accepts a RangeArgument in the form of ... Both start and end may be omitted to default to the beginning/end of the vector. So above, we're really just saying start at new_len and drain to the end.

提交回复
热议问题