Trait core_extensions::slices::ValSliceExt
source · [−]pub trait ValSliceExt: SliceExt + Borrow<[<Self as SliceExt>::Elem]> {
fn split_while<'a, P, U>(
&'a self,
mapper: P
) -> SplitSliceWhile<'a, Self::Elem, P, U>ⓘNotable traits for SplitSliceWhile<'a, T, P, U>impl<'a, T, P, U: Eq + Clone> Iterator for SplitSliceWhile<'a, T, P, U> where
P: FnMut(&'a T) -> U, type Item = KeySlice<'a, T, U>;
where
P: FnMut(&'a Self::Elem) -> U,
U: Eq + Clone,
{ ... }
fn rsplit_while<'a, P, U>(
&'a self,
mapper: P
) -> RSplitSliceWhile<'a, Self::Elem, P, U>ⓘNotable traits for RSplitSliceWhile<'a, T, P, U>impl<'a, T, P, U: Eq + Clone> Iterator for RSplitSliceWhile<'a, T, P, U> where
P: FnMut(&'a T) -> U, type Item = KeySlice<'a, T, U>;
where
P: FnMut(&'a Self::Elem) -> U,
U: Eq + Clone,
{ ... }
}
Available on crate feature
slices
only.Expand description
Extension trait for [T]
.
Provided Methods
sourcefn split_while<'a, P, U>(
&'a self,
mapper: P
) -> SplitSliceWhile<'a, Self::Elem, P, U>ⓘNotable traits for SplitSliceWhile<'a, T, P, U>impl<'a, T, P, U: Eq + Clone> Iterator for SplitSliceWhile<'a, T, P, U> where
P: FnMut(&'a T) -> U, type Item = KeySlice<'a, T, U>;
where
P: FnMut(&'a Self::Elem) -> U,
U: Eq + Clone,
fn split_while<'a, P, U>(
&'a self,
mapper: P
) -> SplitSliceWhile<'a, Self::Elem, P, U>ⓘNotable traits for SplitSliceWhile<'a, T, P, U>impl<'a, T, P, U: Eq + Clone> Iterator for SplitSliceWhile<'a, T, P, U> where
P: FnMut(&'a T) -> U, type Item = KeySlice<'a, T, U>;
where
P: FnMut(&'a Self::Elem) -> U,
U: Eq + Clone,
P: FnMut(&'a T) -> U, type Item = KeySlice<'a, T, U>;
Returns an iterator over subslices whose elements were mapped
to the same value by mapper
.
The returned type implements
DoubleEndedIterator<Item =
KeySlice
<Self::Elem, U>>
.
Example
use core_extensions::ValSliceExt;
use core_extensions::slices::KeySlice;
{
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 = [0, 4, 1, 5, 9, 8, 7];
assert_eq!(
list.split_while(|x| x%4).collect::<Vec<_>>(),
vec![
KeySlice{key: 0, slice: &[0, 4]},
KeySlice{key: 1, slice: &[1, 5, 9]},
KeySlice{key: 0, slice: &[8]},
KeySlice{key: 3, slice: &[7]},
]
);
}
sourcefn rsplit_while<'a, P, U>(
&'a self,
mapper: P
) -> RSplitSliceWhile<'a, Self::Elem, P, U>ⓘNotable traits for RSplitSliceWhile<'a, T, P, U>impl<'a, T, P, U: Eq + Clone> Iterator for RSplitSliceWhile<'a, T, P, U> where
P: FnMut(&'a T) -> U, type Item = KeySlice<'a, T, U>;
where
P: FnMut(&'a Self::Elem) -> U,
U: Eq + Clone,
fn rsplit_while<'a, P, U>(
&'a self,
mapper: P
) -> RSplitSliceWhile<'a, Self::Elem, P, U>ⓘNotable traits for RSplitSliceWhile<'a, T, P, U>impl<'a, T, P, U: Eq + Clone> Iterator for RSplitSliceWhile<'a, T, P, U> where
P: FnMut(&'a T) -> U, type Item = KeySlice<'a, T, U>;
where
P: FnMut(&'a Self::Elem) -> U,
U: Eq + Clone,
P: FnMut(&'a T) -> U, type Item = KeySlice<'a, T, U>;
A variation of split_while
that iterates
from the right(the order of subslices is reversed).
The returned type implements
DoubleEndedIterator<Item =
KeySlice
<Self::Elem, U>>
.
Example
use core_extensions::ValSliceExt;
use core_extensions::slices::KeySlice;
{
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 = [0, 4, 1, 5, 9, 8, 7];
assert_eq!(
list.rsplit_while(|x| x%4 ).collect::<Vec<_>>(),
vec![
KeySlice{key: 3, slice: &[7]},
KeySlice{key: 0, slice: &[8]},
KeySlice{key: 1, slice: &[1, 5, 9]},
KeySlice{key: 0, slice: &[0, 4]},
]
);
}