@@ -48,6 +48,98 @@ then it can't be accepted into ``libcore``, and you should propose it for ``iter
48
48
Recent Changes
49
49
--------------
50
50
51
+ - 0.9.0
52
+
53
+ - Added a `.exactly_one() <https://docs.rs/itertools/0.9.0/itertools/trait.Itertools.html#method.exactly_one >`_
54
+ iterator method that, on success, extracts the single value of an
55
+ iterator
56
+ ; by @Xaeroxe
57
+
58
+ - Added combinatory iterator adaptors:
59
+
60
+ - `.permutations(k) <https://docs.rs/itertools/0.9.0/itertools/trait.Itertools.html#method.permutations >`_:
61
+
62
+ ``[0, 1, 2].iter().permutations(2) `` yields
63
+
64
+ .. code :: rust
65
+
66
+ [
67
+ vec![0, 1],
68
+ vec![0, 2],
69
+ vec![1, 0],
70
+ vec![1, 2],
71
+ vec![2, 0],
72
+ vec![2, 1],
73
+ ]
74
+
75
+ ; by @tobz1000
76
+
77
+ - `.combinations(k) <https://docs.rs/itertools/0.9.0/itertools/trait.Itertools.html#method.combinations >`_:
78
+
79
+ ``[0, 1, 2].iter().combinations(2) `` yields
80
+
81
+ .. code :: rust
82
+
83
+ [
84
+ vec![0, 1],
85
+ vec![0, 2],
86
+ vec![1, 2],
87
+ ]
88
+
89
+ ; by @tobz1000
90
+
91
+ - `.combinations_with_replacement(k) <https://docs.rs/itertools/0.9.0/itertools/trait.Itertools.html#method.combinations_with_replacement >`_:
92
+
93
+ ``[0, 1, 2].iter().combinations_with_replacement(2) `` yields
94
+
95
+ .. code :: rust
96
+
97
+ [
98
+ vec![0, 0],
99
+ vec![0, 1],
100
+ vec![0, 2],
101
+ vec![1, 1],
102
+ vec![1, 2],
103
+ vec![2, 2],
104
+ ]
105
+
106
+ ; by @tommilligan
107
+
108
+ - Improved the performance of `.fold() <https://docs.rs/itertools/0.9.0/itertools/trait.Itertools.html#method.fold >`_-based internal iteration for the
109
+ `.intersperse() <https://docs.rs/itertools/0.9.0/itertools/trait.Itertools.html#method.intersperse >`_ iterator
110
+ ; by @jswrenn
111
+
112
+ - Added
113
+ `.dedup_by() <https://docs.rs/itertools/0.9.0/itertools/trait.Itertools.html#method.dedup_by >`_,
114
+ `.merge_by() <https://docs.rs/itertools/0.9.0/itertools/trait.Itertools.html#method.merge_by >`_
115
+ and `.kmerge_by() <https://docs.rs/itertools/0.9.0/itertools/trait.Itertools.html#method.kmerge_by >`_
116
+ adaptors that work like
117
+ `.dedup() <https://docs.rs/itertools/0.9.0/itertools/trait.Itertools.html#method.dedup >`_,
118
+ `.merge() <https://docs.rs/itertools/0.9.0/itertools/trait.Itertools.html#method.merge >`_ and
119
+ `.kmerge() <https://docs.rs/itertools/0.9.0/itertools/trait.Itertools.html#method.kmerge >`_,
120
+ but taking an additional custom comparison closure parameter.
121
+ ; by @phimuemue
122
+
123
+ - Improved the performance of `.all_equal() <https://docs.rs/itertools/0.9.0/itertools/trait.Itertools.html#method.all_equal >`_
124
+ ; by @fyrchik
125
+
126
+ - Loosened the bounds on `.partition_map() <https://docs.rs/itertools/0.9.0/itertools/trait.Itertools.html#method.partition_map >`_
127
+ to take just a ``FnMut `` closure rather than a ``Fn `` closure, and made its
128
+ implementation use internal iteration for better performance
129
+ ; by @danielhenrymantilla
130
+
131
+ - Added convenience methods to
132
+ `EitherOrBoth <https://docs.rs/itertools/0.9.0/itertools/enum.EitherOrBoth.html >`_ elements yielded from the
133
+ `.zip_longest() <https://docs.rs/itertools/0.9.0/itertools/trait.Itertools.html#method.zip_longest >`_ iterator adaptor
134
+ ; by @Avi-D-coder
135
+
136
+ - Added `.sum1() <https://docs.rs/itertools/0.9.0/itertools/trait.Itertools.html#method.sum1 >`_
137
+ and `.product1() <https://docs.rs/itertools/0.9.0/itertools/trait.Itertools.html#method.product1 >`_
138
+ iterator methods that respectively try to return the sum and the product of
139
+ the elements of an iterator **when it is not empty **, otherwise they return
140
+ ``None ``
141
+ ; by Emerentius
142
+
51
143
- 0.8.0
52
144
53
145
- Added new adaptor ``.map_into() `` for conversions using ``Into `` by @vorner
0 commit comments