4 releases
new 0.1.3 | Jan 19, 2025 |
---|---|
0.1.2 | Jan 1, 2025 |
0.1.1 | Oct 21, 2024 |
0.1.0 | Oct 20, 2024 |
#726 in Algorithms
146 downloads per month
18KB
412 lines
steepen
steepen
is a crate used to convert an iterator of elements into an iterator of blocks, given
that blocks can be created from an iterator of elements.
Does the contrary of the flatten
function, hence the name.
Examples
use steepen::Steepenable;
let iter = vec![("a", 1),("a", 2),("b", 1),("b", 2),("b", 1),("c", 2)].into_iter();
let mut result = iter
.steepen_by::<Vec<(&str, u32)>>(
// letters are different or numbers are descending
|x, y| x.0 != y.0 || x.1 > y.1
);
assert_eq!(result.next(), Some(vec![("a", 1),("a", 2)]));
assert_eq!(result.next(), Some(vec![("b", 1),("b", 2)]));
assert_eq!(result.next(), Some(vec![("b", 1)]));
assert_eq!(result.next(), Some(vec![("c", 2)]));
assert_eq!(result.next(), None);
Properties
iterators returned by a steepen
function respect four principles:
- It won't be empty
- Elements remain in order, i.e a
flatten
function reverses it - Last element of an iterator and first element of the next iterator respect the predicate
- every pair of consecutive element in an iterator don't respect the predicate