Rust

Rust

By DeepSource

Found manual implementation of retain() RS-P1009

Performance

The collections in Rust (Vec, VecDeque, HashMap, HashSet, etc.) provide the retain(..) method to filter elements matching a given predicate and discard the rest. The drain(..) method can be used to do the reverse as well.

Consider using this instead of iter().filter().collect().

Bad practice

fn foo() {
    let v: Vec<i32> = vec![1, 2, 3, 4];
    let even_v: Vec<i32> = v.iter().filter(|x| x % 2 == 0).collect();
    let dq = VecDeque::from([1, 2, 3, 4]);
    let even_dq: VecDeque<i32> = dq.iter().filter(|x| x % 2 == 0).collect();
}

Recommended

fn foo() {
    let v: Vec<i32> = vec![1, 2, 3, 4];
    let even_v: Vec<i32> = v.retain(|x| x % 2 == 0);
    let dq = VecDeque::from([1, 2, 3, 4]);
    let even_dq: VecDeque<i32> = dq.retain(|x| x % 2 == 0);
}