@@ -2478,6 +2478,62 @@ impl<T> [T] {
24782478 RSplitNMut :: new ( self . rsplit_mut ( pred) , n)
24792479 }
24802480
2481+ /// Splits the slice on the first element that matches the specified
2482+ /// predicate.
2483+ ///
2484+ /// If any matching elements are resent in the slice, returns the prefix
2485+ /// before the match and suffix after. The matching element itself is not
2486+ /// included. If no elements match, returns `None`.
2487+ ///
2488+ /// # Examples
2489+ ///
2490+ /// ```
2491+ /// #![feature(slice_split_once)]
2492+ /// let s = [1, 2, 3, 2, 4];
2493+ /// assert_eq!(s.split_once(|&x| x == 2), Some((
2494+ /// &[1][..],
2495+ /// &[3, 2, 4][..]
2496+ /// )));
2497+ /// assert_eq!(s.split_once(|&x| x == 0), None);
2498+ /// ```
2499+ #[ unstable( feature = "slice_split_once" , reason = "newly added" , issue = "112811" ) ]
2500+ #[ inline]
2501+ pub fn split_once < F > ( & self , pred : F ) -> Option < ( & [ T ] , & [ T ] ) >
2502+ where
2503+ F : FnMut ( & T ) -> bool ,
2504+ {
2505+ let index = self . iter ( ) . position ( pred) ?;
2506+ Some ( ( & self [ ..index] , & self [ index + 1 ..] ) )
2507+ }
2508+
2509+ /// Splits the slice on the last element that matches the specified
2510+ /// predicate.
2511+ ///
2512+ /// If any matching elements are resent in the slice, returns the prefix
2513+ /// before the match and suffix after. The matching element itself is not
2514+ /// included. If no elements match, returns `None`.
2515+ ///
2516+ /// # Examples
2517+ ///
2518+ /// ```
2519+ /// #![feature(slice_split_once)]
2520+ /// let s = [1, 2, 3, 2, 4];
2521+ /// assert_eq!(s.rsplit_once(|&x| x == 2), Some((
2522+ /// &[1, 2, 3][..],
2523+ /// &[4][..]
2524+ /// )));
2525+ /// assert_eq!(s.rsplit_once(|&x| x == 0), None);
2526+ /// ```
2527+ #[ unstable( feature = "slice_split_once" , reason = "newly added" , issue = "112811" ) ]
2528+ #[ inline]
2529+ pub fn rsplit_once < F > ( & self , pred : F ) -> Option < ( & [ T ] , & [ T ] ) >
2530+ where
2531+ F : FnMut ( & T ) -> bool ,
2532+ {
2533+ let index = self . iter ( ) . rposition ( pred) ?;
2534+ Some ( ( & self [ ..index] , & self [ index + 1 ..] ) )
2535+ }
2536+
24812537 /// Returns `true` if the slice contains an element with the given value.
24822538 ///
24832539 /// This operation is *O*(*n*).
0 commit comments