[−][src]Trait core_extensions::ValSliceExt
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,
ⓘImportant traits for SplitSliceWhile<'a, T, P, U>
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,
ⓘImportant traits for RSplitSliceWhile<'a, T, P, U>
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 ) ); }