Skip to content

Commit 0545375

Browse files
committed
Add examples of ordered retain
1 parent 9b35833 commit 0545375

File tree

3 files changed

+34
-0
lines changed

3 files changed

+34
-0
lines changed

src/liballoc/collections/vec_deque.rs

+14
Original file line numberDiff line numberDiff line change
@@ -1848,6 +1848,20 @@ impl<T> VecDeque<T> {
18481848
/// buf.retain(|&x| x%2 == 0);
18491849
/// assert_eq!(buf, [2, 4]);
18501850
/// ```
1851+
///
1852+
/// The exact order may be useful for tracking external state, like an index.
1853+
///
1854+
/// ```
1855+
/// use std::collections::VecDeque;
1856+
///
1857+
/// let mut buf = VecDeque::new();
1858+
/// buf.extend(1..6);
1859+
///
1860+
/// let keep = [false, true, true, false, true];
1861+
/// let mut i = 0;
1862+
/// buf.retain(|_| (keep[i], i += 1).0);
1863+
/// assert_eq!(buf, [2, 3, 5]);
1864+
/// ```
18511865
#[stable(feature = "vec_deque_retain", since = "1.4.0")]
18521866
pub fn retain<F>(&mut self, mut f: F)
18531867
where F: FnMut(&T) -> bool

src/liballoc/string.rs

+10
Original file line numberDiff line numberDiff line change
@@ -1212,6 +1212,16 @@ impl String {
12121212
///
12131213
/// assert_eq!(s, "foobar");
12141214
/// ```
1215+
///
1216+
/// The exact order may be useful for tracking external state, like an index.
1217+
///
1218+
/// ```
1219+
/// let mut s = String::from("abcde");
1220+
/// let keep = [false, true, true, false, true];
1221+
/// let mut i = 0;
1222+
/// s.retain(|_| (keep[i], i += 1).0);
1223+
/// assert_eq!(s, "bce");
1224+
/// ```
12151225
#[inline]
12161226
#[stable(feature = "string_retain", since = "1.26.0")]
12171227
pub fn retain<F>(&mut self, mut f: F)

src/liballoc/vec.rs

+10
Original file line numberDiff line numberDiff line change
@@ -947,6 +947,16 @@ impl<T> Vec<T> {
947947
/// vec.retain(|&x| x%2 == 0);
948948
/// assert_eq!(vec, [2, 4]);
949949
/// ```
950+
///
951+
/// The exact order may be useful for tracking external state, like an index.
952+
///
953+
/// ```
954+
/// let mut vec = vec![1, 2, 3, 4, 5];
955+
/// let keep = [false, true, true, false, true];
956+
/// let mut i = 0;
957+
/// vec.retain(|_| (keep[i], i += 1).0);
958+
/// assert_eq!(vec, [2, 3, 5]);
959+
/// ```
950960
#[stable(feature = "rust1", since = "1.0.0")]
951961
pub fn retain<F>(&mut self, mut f: F)
952962
where F: FnMut(&T) -> bool

0 commit comments

Comments
 (0)