From 0fde2bebf7a7f53a02b90290378ad441c11e69a1 Mon Sep 17 00:00:00 2001 From: Takashiidobe Date: Thu, 9 Oct 2025 10:42:11 -0400 Subject: [PATCH 1/3] examples for minmax_by and minmax_by_key --- src/lib.rs | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/src/lib.rs b/src/lib.rs index ee4f3ab78..eeea859f9 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -4105,6 +4105,26 @@ pub trait Itertools: Iterator { /// /// The keys can be floats but no particular result is guaranteed /// if a key is NaN. + /// + /// # Examples + /// ``` + /// use itertools::Itertools; + /// use itertools::MinMaxResult::{MinMax, NoElements, OneElement}; + /// + /// let abs_key = |x: &&i32| x.abs(); + /// + /// let a: [i32; 0] = []; + /// assert_eq!(a.iter().minmax_by_key(abs_key), NoElements); + /// + /// let a = [1]; + /// assert_eq!(a.iter().minmax_by_key(abs_key), OneElement(&1)); + /// + /// let a = [-2, -1, 0, 1, 2]; + /// assert_eq!(a.iter().minmax_by_key(abs_key), MinMax(&0, &2)); + /// + /// let a = [1, 1, 1, 1]; + /// assert_eq!(a.iter().minmax_by_key(abs_key), MinMax(&1, &1)); + /// ``` fn minmax_by_key(self, key: F) -> MinMaxResult where Self: Sized, @@ -4122,6 +4142,27 @@ pub trait Itertools: Iterator { /// For the minimum, the first minimal element is returned. For the maximum, /// the last maximal element wins. This matches the behavior of the standard /// [`Iterator::min`] and [`Iterator::max`] methods. + /// + /// # Examples + /// + /// ``` + /// use itertools::Itertools; + /// use itertools::MinMaxResult::{MinMax, NoElements, OneElement}; + /// + /// let abs_cmp = |x: &&i32, y: &&i32| x.abs().cmp(&y.abs()); + /// + /// let a: [i32; 0] = []; + /// assert_eq!(a.iter().minmax_by(&abs_cmp), NoElements); + /// + /// let a = [1]; + /// assert_eq!(a.iter().minmax_by(&abs_cmp), OneElement(&1)); + /// + /// let a = [-2, -1, 0, 1, 2]; + /// assert_eq!(a.iter().minmax_by(&abs_cmp), MinMax(&0, &2)); + /// + /// let a = [1, 1, 1, 1]; + /// assert_eq!(a.iter().minmax_by(&abs_cmp), MinMax(&1, &1)); + /// ``` fn minmax_by(self, mut compare: F) -> MinMaxResult where Self: Sized, From 81ccdfe68bfcab9e163e017e00f26e887b023827 Mon Sep 17 00:00:00 2001 From: Takashiidobe Date: Thu, 9 Oct 2025 13:33:21 -0400 Subject: [PATCH 2/3] simplify examples and use (i32, char) instead of just plain i32 to make it clearer which minimum elements and maximum elements are chosen --- src/lib.rs | 50 +++++++++++++++++++++++++------------------------- 1 file changed, 25 insertions(+), 25 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index eeea859f9..339126c06 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -4071,17 +4071,17 @@ pub trait Itertools: Iterator { /// use itertools::Itertools; /// use itertools::MinMaxResult::{MinMax, NoElements, OneElement}; /// - /// let a: [i32; 0] = []; + /// let a: [(i32, char); 0] = []; /// assert_eq!(a.iter().minmax(), NoElements); /// - /// let a = [1]; - /// assert_eq!(a.iter().minmax(), OneElement(&1)); + /// let a = [(1, 'a')]; + /// assert_eq!(a.iter().minmax(), OneElement(&(1, 'a'))); /// - /// let a = [1, 2, 3, 4, 5]; - /// assert_eq!(a.iter().minmax(), MinMax(&1, &5)); + /// let a = [(0, 'a'), (1, 'b')]; + /// assert_eq!(a.iter().minmax(), MinMax(&(0, 'a'), &(1, 'b'))); /// - /// let a = [1, 1, 1, 1]; - /// assert_eq!(a.iter().minmax(), MinMax(&1, &1)); + /// let a = [(1, 'a'), (1, 'b'), (1, 'c')]; + /// assert_eq!(a.iter().minmax(), MinMax(&(1, 'a'), &(1, 'c'))); /// ``` /// /// The elements can be floats but no particular result is guaranteed @@ -4111,19 +4111,19 @@ pub trait Itertools: Iterator { /// use itertools::Itertools; /// use itertools::MinMaxResult::{MinMax, NoElements, OneElement}; /// - /// let abs_key = |x: &&i32| x.abs(); + /// let cmp_key = |x: &&(i32, char)| x.0; /// - /// let a: [i32; 0] = []; - /// assert_eq!(a.iter().minmax_by_key(abs_key), NoElements); + /// let a: [(i32, char); 0] = []; + /// assert_eq!(a.iter().minmax_by_key(cmp_key), NoElements); /// - /// let a = [1]; - /// assert_eq!(a.iter().minmax_by_key(abs_key), OneElement(&1)); + /// let a = [(1, 'a')]; + /// assert_eq!(a.iter().minmax_by_key(cmp_key), OneElement(&(1, 'a'))); /// - /// let a = [-2, -1, 0, 1, 2]; - /// assert_eq!(a.iter().minmax_by_key(abs_key), MinMax(&0, &2)); + /// let a = [(0, 'a'), (1, 'b')]; + /// assert_eq!(a.iter().minmax_by_key(cmp_key), MinMax(&(0, 'a'), &(1, 'b'))); /// - /// let a = [1, 1, 1, 1]; - /// assert_eq!(a.iter().minmax_by_key(abs_key), MinMax(&1, &1)); + /// let a = [(1, 'a'), (1, 'b'), (1, 'c')]; + /// assert_eq!(a.iter().minmax_by_key(cmp_key), MinMax(&(1, 'a'), &(1, 'c'))); /// ``` fn minmax_by_key(self, key: F) -> MinMaxResult where @@ -4149,19 +4149,19 @@ pub trait Itertools: Iterator { /// use itertools::Itertools; /// use itertools::MinMaxResult::{MinMax, NoElements, OneElement}; /// - /// let abs_cmp = |x: &&i32, y: &&i32| x.abs().cmp(&y.abs()); + /// let abs_cmp = |x: &&(i32, char), y: &&(i32, char)| x.0.cmp(&y.0); /// - /// let a: [i32; 0] = []; - /// assert_eq!(a.iter().minmax_by(&abs_cmp), NoElements); + /// let a: [(i32, char); 0] = []; + /// assert_eq!(a.iter().minmax_by(abs_cmp), NoElements); /// - /// let a = [1]; - /// assert_eq!(a.iter().minmax_by(&abs_cmp), OneElement(&1)); + /// let a = [(1, 'a')]; + /// assert_eq!(a.iter().minmax_by(abs_cmp), OneElement(&(1, 'a'))); /// - /// let a = [-2, -1, 0, 1, 2]; - /// assert_eq!(a.iter().minmax_by(&abs_cmp), MinMax(&0, &2)); + /// let a = [(0, 'a'), (1, 'b')]; + /// assert_eq!(a.iter().minmax_by(abs_cmp), MinMax(&(0, 'a'), &(1, 'b'))); /// - /// let a = [1, 1, 1, 1]; - /// assert_eq!(a.iter().minmax_by(&abs_cmp), MinMax(&1, &1)); + /// let a = [(1, 'a'), (1, 'b'), (1, 'c')]; + /// assert_eq!(a.iter().minmax_by(abs_cmp), MinMax(&(1, 'a'), &(1, 'c'))); /// ``` fn minmax_by(self, mut compare: F) -> MinMaxResult where From 7a22d9799e45eb405f7e865c87fe756dd3429fcc Mon Sep 17 00:00:00 2001 From: Takashiidobe Date: Thu, 9 Oct 2025 14:11:33 -0400 Subject: [PATCH 3/3] code review feedback --- src/lib.rs | 28 +++++++++++++++++++++++----- 1 file changed, 23 insertions(+), 5 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index 339126c06..36ddef6cc 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -4071,6 +4071,23 @@ pub trait Itertools: Iterator { /// use itertools::Itertools; /// use itertools::MinMaxResult::{MinMax, NoElements, OneElement}; /// + /// let a: [i32; 0] = []; + /// assert_eq!(a.iter().minmax(), NoElements); + /// + /// let a = [1]; + /// assert_eq!(a.iter().minmax(), OneElement(&1)); + /// + /// let a = [1, 2, 3, 4, 5]; + /// assert_eq!(a.iter().minmax(), MinMax(&1, &5)); + /// + /// let a = [1, 1, 1, 1]; + /// assert_eq!(a.iter().minmax(), MinMax(&1, &1)); + /// ``` + /// + /// ``` + /// use itertools::Itertools; + /// use itertools::MinMaxResult::{MinMax, NoElements, OneElement}; + /// /// let a: [(i32, char); 0] = []; /// assert_eq!(a.iter().minmax(), NoElements); /// @@ -4107,6 +4124,7 @@ pub trait Itertools: Iterator { /// if a key is NaN. /// /// # Examples + /// /// ``` /// use itertools::Itertools; /// use itertools::MinMaxResult::{MinMax, NoElements, OneElement}; @@ -4149,19 +4167,19 @@ pub trait Itertools: Iterator { /// use itertools::Itertools; /// use itertools::MinMaxResult::{MinMax, NoElements, OneElement}; /// - /// let abs_cmp = |x: &&(i32, char), y: &&(i32, char)| x.0.cmp(&y.0); + /// let first_item_cmp = |x: &&(i32, char), y: &&(i32, char)| x.0.cmp(&y.0); /// /// let a: [(i32, char); 0] = []; - /// assert_eq!(a.iter().minmax_by(abs_cmp), NoElements); + /// assert_eq!(a.iter().minmax_by(first_item_cmp), NoElements); /// /// let a = [(1, 'a')]; - /// assert_eq!(a.iter().minmax_by(abs_cmp), OneElement(&(1, 'a'))); + /// assert_eq!(a.iter().minmax_by(first_item_cmp), OneElement(&(1, 'a'))); /// /// let a = [(0, 'a'), (1, 'b')]; - /// assert_eq!(a.iter().minmax_by(abs_cmp), MinMax(&(0, 'a'), &(1, 'b'))); + /// assert_eq!(a.iter().minmax_by(first_item_cmp), MinMax(&(0, 'a'), &(1, 'b'))); /// /// let a = [(1, 'a'), (1, 'b'), (1, 'c')]; - /// assert_eq!(a.iter().minmax_by(abs_cmp), MinMax(&(1, 'a'), &(1, 'c'))); + /// assert_eq!(a.iter().minmax_by(first_item_cmp), MinMax(&(1, 'a'), &(1, 'c'))); /// ``` fn minmax_by(self, mut compare: F) -> MinMaxResult where