Skip to main content

colon/
pull_at.rs

1extern crate test;
2use std::cmp::PartialEq;
3
4pub fn pull_at<T: PartialEq>(v: &mut Vec<T>, mut idxs: Vec<usize>) -> Vec<T> {
5  idxs.sort();
6  idxs.reverse();
7  idxs.iter().map(|x| v.remove(*x)).collect::<Vec<T>>()
8}
9
10#[cfg(test)]
11mod tests {
12  use super::*;
13  use test::Bencher;
14
15  #[test]
16  fn it_works() {
17    let mut v = vec![1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
18    let pulled = pull_at(&mut v, vec![0, 9, 1]);
19
20    assert_eq!(v, vec![3, 4, 5, 6, 7, 8, 9]);
21    assert_eq!(pulled, vec![10, 2, 1]);
22  }
23
24  #[bench]
25  fn bench_pull_at(b: &mut Bencher) {
26    // benchmark with 10 items
27    b.iter(|| {
28      let mut v = vec![1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
29      pull_at(&mut v, vec![0, 9, 1])
30    });
31  }
32}