[][src]Trait core_extensions::slices::ValSliceExt

pub trait ValSliceExt<T>: Borrow<[T]> + SliceExt<T> {
    fn split_while<'a, P, U>(
        &'a self,
        mapper: P
    ) -> SplitSliceWhile<'a, T, P, U>
    where
        P: FnMut(&'a T) -> U,
        U: Eq + Clone
, { ... }
fn rsplit_while<'a, P, U>(
        &'a self,
        mapper: P
    ) -> RSplitSliceWhile<'a, T, P, U>
    where
        P: FnMut(&'a T) -> U,
        U: Eq + Clone
, { ... } }

Extension trait for [T].

Provided methods

Important traits for SplitSliceWhile<'a, T, P, U>
fn split_while<'a, P, U>(&'a self, mapper: P) -> SplitSliceWhile<'a, T, P, U> where
    P: FnMut(&'a T) -> U,
    U: Eq + Clone

Returns an iterator over subslices whose elements were mapped to the same key by mapper.

Returns an impl Iterator<Item=KeySlice<T>>

Example

use core_extensions::ValSliceExt;
use core_extensions::slices::KeySlice;

fn func<'a,T,U,F>(s:&'a [T],f:F)->Vec<(U,Vec<T>)>
where
    T:Clone,
    F:FnMut(&'a T)->U,
    U:Eq+Clone,
{
    s.split_while(f).map(|v| (v.key,v.slice.to_vec()) ).collect()
}

{
    let list=vec![0,1,2,3,4,5,6,7,8];

    assert_eq!(
        list.split_while(|x| x/4 ).collect::<Vec<_>>(),
        vec![
            KeySlice{key:0,slice:&[0,1,2,3]},
            KeySlice{key:1,slice:&[4,5,6,7]},
            KeySlice{key:2,slice:&[8]},
        ]
    );
}

{
    let list=vec![0,4,1,5,9,8,7];

    assert_eq!(
        vec![(0,vec![0,4]), (1,vec![1,5,9]), (0,vec![8]), (3,vec![7])],
        func(&list,|x| x%4 )
    );
}

Important traits for RSplitSliceWhile<'a, T, P, U>
fn rsplit_while<'a, P, U>(&'a self, mapper: P) -> RSplitSliceWhile<'a, T, P, U> where
    P: FnMut(&'a T) -> U,
    U: Eq + Clone

A variation of split_while that iterates from the right(the order of subslices is reversed).

Returns an impl Iterator<Item=KeySlice<T>>

Example

use core_extensions::ValSliceExt;
use core_extensions::slices::KeySlice;

fn func<'a,T,U,F>(s:&'a [T],f:F)->Vec<(U,Vec<T>)>
where
    T:Clone,
    F:FnMut(&'a T)->U,
    U:Eq+Clone,
{
    s.rsplit_while(f).map(|v| (v.key,v.slice.to_vec()) ).collect()
}

{
    let list=vec![0,1,2,3,4,5,6,7,8];

    assert_eq!(
        list.rsplit_while(|x| x/4 ).collect::<Vec<_>>(),
        vec![
            KeySlice{key:2,slice:&[8]},
            KeySlice{key:1,slice:&[4,5,6,7]},
            KeySlice{key:0,slice:&[0,1,2,3]},
        ]
    );
}

{
    let list=vec![0,4,1,5,9,8,7];

    assert_eq!(
        vec![ (3,vec![7]), (0,vec![8]), (1,vec![1,5,9]), (0,vec![0,4]) ],
        func(&list,|x| x%4 )
    );
}


Loading content...

Implementors

impl<T, This: ?Sized> ValSliceExt<T> for This where
    This: Borrow<[T]> + SliceExt<T>, 
[src]

Loading content...