A rust crate providing 2 functions for Vec useful in leaderboards:
- vec.iter_ranked()
: iterates on a sorted vec and group Equal elements together (ex aequos)
- vec.iter_sections(ranges)
: iterate over the vec on the domain defined by a vec of ranges
Here's how the 2 functions can be used together to display top and bottom 3 ranks with ex aequos: ```rust fn test() { let scores = vec![150, 142, 138, 138, 135, 120, 101, 83, 66, 61, 61]; let ranking: Vec<_> = scores.iterranked().collect(); let last = ranking.len(); let mut rank = 1; for view in ranking.itersections(vec![0..3, last-3..last]) { if let View::Skipped(offset) = view { println!("..."); rank += offset } else { println!("{rank}. {view:?}"); rank += 1 }; } }
```
Output:
1. Item([150])
2. Item([142])
3. Item([138, 138])
...
7. Item([83])
8. Item([66])
9. Item([61, 61])