Module itertools

Extra iterator methods and utilities.


itertools extends Rust's iterator functionality with a rich collection of additional iterator methods and utilities.

The crate provides the Itertools trait that adds dozens of useful methods to any iterator, enabling powerful functional programming patterns. It includes methods for grouping, batching, sorting, deduplication, and complex iteration patterns that would otherwise require verbose loops.

Key features include chunk_by for grouping consecutive elements, chunk for batching elements into fixed-size groups, sorted for sorting without collecting first, dedup for removing duplicates, intersperse for inserting separators, and cartesian_product for combining iterators.

The crate also provides standalone functions like zip_eq for strict zipping that panics on length mismatches, and repeat_n for creating repeating sequences.

Examples

Grouping consecutive elements:

use itertools::Itertools;

let data = vec![1, 1, 2, 2, 2, 3, 1, 1];
let groups: Vec<_> = data
    .into_iter()
    .chunk_by(|&x| x)
    .into_iter()
    .map(|(key, group)| (key, group.count()))
    .collect();

assert_eq!(groups, [(1, 2), (2, 3), (3, 1), (1, 2)]);

Batching and processing in chunks:

use itertools::Itertools;

let data = 1..=10;
let chunks: Vec<Vec<_>> = data.chunks(3).into_iter().map(|chunk| chunk.collect()).collect();

assert_eq!(chunks, [vec![1, 2, 3], vec![4, 5, 6], vec![7, 8, 9], vec![10]]);

Combining iterators with cartesian product:

use itertools::Itertools;

let coords: Vec<_> = (0..3)
    .cartesian_product(0..3)
    .collect();

assert_eq!(coords.len(), 9);
assert_eq!(coords[0], (0, 0));
assert_eq!(coords[8], (2, 2));

Modules

Enums

Traits

Functions

Macros