Function partition::partition_index[][src]

pub fn partition_index<T, P>(data: &mut [T], predicate: P) -> usize where
    P: Fn(&T) -> bool, 

partition a mutable slice in-place so that it contains all elements for which predicate(e) is true, followed by all elements for which predicate(e) is false. Returns the index of the first element which returned false. Returns 0 if all elements returned false. Returns data.len() if all elements returned true.

Examples

let mut even_odd = [0u8, 1, 2, 3, 4, 5, 6];
let first_odd = partition_index(&mut even_odd, |x| x & 1 == 0);
assert_eq!(first_odd, 4, "expected an index of 4, got {:?}", first_odd);
for (idx, &e) in even_odd.iter().enumerate() {
  if idx < first_odd {
    assert!(e & 1 == 0, "expected elements before first_odd to be even, found {:?}", e);
  } else {
    assert!(e & 1 == 1, "expected elements after first_odd to be odd, found {:?}", e);
  } 
}