// https://stackoverflow.com/a/32619597/5066426 fn main() { let v = vec![10, 40, 30, 20, 60, 50]; println!("{:?}", split_filter(&v, |&a| a % 3 == 0)); } fn split_filter(a: &[T], f: F) -> (Vec, Vec) where F: Fn(&T) -> bool { let mut i: Vec = vec![]; let mut e: Vec = vec![]; for u in a.iter().cloned() { if f(&u) { i.push(u) } else { e.push(u) } } (i, e) }