Guest User

Untitled

a guest
Jul 21st, 2018
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.77 KB | None | 0 0
  1. trait SliceExt<T> {
  2. fn split_by<F>(&self, pred: F) -> (&[T], &[T])
  3. where
  4. F: FnMut(&T) -> bool;
  5. }
  6.  
  7. impl<T> SliceExt<T> for [T] {
  8. fn split_by<F>(&self, mut pred: F) -> (&[T], &[T])
  9. where
  10. F: FnMut(&T) -> bool,
  11. {
  12. let p = self
  13. .iter()
  14. .enumerate()
  15. .find(|&(_, val)| !pred(val))
  16. .map(|(pos, _)| pos)
  17. .unwrap_or_else(|| self.len());
  18.  
  19. self.split_at(p)
  20. }
  21. }
  22.  
  23. fn main() {
  24. assert!([].split_by(|x: &i32| *x < 10) == (&[], &[]));
  25. assert!([1].split_by(|&x| x < 10) == (&[1], &[]));
  26. assert!([1, 11].split_by(|&x| x < 10) == (&[1], &[11]));
  27. assert!([1, 2, 10, 11].split_by(|&x| x < 10) == (&[1, 2], &[10, 11]));
  28. assert!([11].split_by(|&x| x < 10) == (&[], &[11]));
  29. }
Add Comment
Please, Sign In to add comment