Crates.io | many-unzip |
lib.rs | many-unzip |
version | |
source | src |
created_at | 2024-08-29 18:00:49.510461+00 |
updated_at | 2025-03-05 15:47:22.019266+00 |
description | Unzip iterators into tuples of arbitrary length, surpassing the limitations of `Iterator::unzip` and `itertools::multiunzip`. |
homepage | |
repository | https://github.com/eopb/many-unzip |
max_upload_size | |
id | 1356510 |
Cargo.toml error: | TOML parse error at line 20, column 1 | 20 | autolib = false | ^^^^^^^ unknown field `autolib`, expected one of `name`, `version`, `edition`, `authors`, `description`, `readme`, `license`, `repository`, `homepage`, `documentation`, `build`, `resolver`, `links`, `default-run`, `default_dash_run`, `rust-version`, `rust_dash_version`, `rust_version`, `license-file`, `license_dash_file`, `license_file`, `licenseFile`, `license_capital_file`, `forced-target`, `forced_dash_target`, `autobins`, `autotests`, `autoexamples`, `autobenches`, `publish`, `metadata`, `keywords`, `categories`, `exclude`, `include` |
size | 0 |
Like Iterator::unzip
with the Extend
trait (since Rust 1.85) or itertools::multiunzip
, but without the 12 tuples limitation (up to 192 tuples).
Converts an iterator of tuples into a tuple of containers, many_unzip()
consumes an entire iterator of k-tuples tuples, producing k
collections, one for each column.
With default features, many_unzip
supports up to 24-tuples.
Larger numbers can be enabled with feature flags, up to 192-tuples with the 192_tuple
feature.
This function is, in some sense, the opposite of itertools::multizip
.
# use many_unzip::many_unzip;
let inputs = vec![
(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13),
(14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26),
(27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39),
];
let (a, b, c, d, e, f, g, h, i, j, k, l, m): (
Vec<_>,
Vec<_>,
Vec<_>,
Vec<_>,
Vec<_>,
Vec<_>,
Vec<_>,
Vec<_>,
Vec<_>,
Vec<_>,
Vec<_>,
Vec<_>,
Vec<_>,
) = many_unzip(inputs);
assert_eq!(a, vec![1, 14, 27]);
assert_eq!(b, vec![2, 15, 28]);
assert_eq!(c, vec![3, 16, 29]);
assert_eq!(d, vec![4, 17, 30]);
assert_eq!(e, vec![5, 18, 31]);
assert_eq!(f, vec![6, 19, 32]);
assert_eq!(g, vec![7, 20, 33]);
assert_eq!(h, vec![8, 21, 34]);
assert_eq!(i, vec![9, 22, 35]);
assert_eq!(j, vec![10, 23, 36]);
assert_eq!(k, vec![11, 24, 37]);
assert_eq!(l, vec![12, 25, 38]);
assert_eq!(m, vec![13, 26, 39]);