1 个不稳定版本
使用旧的 Rust 2015
0.1.0 | 2015年5月25日 |
---|
#2673 在 Rust 模式
85 每月下载量
17KB
335 行
multizip
将 3, 4, 5 或更多 Rust 迭代器打包
描述
使用 Rust 的 stdlib,一次只能打包 2 个迭代器
let a: Vec<i8> = vec![0, 1, 2];
let b: Vec<i8> = vec![3, 4, 5];
let c: Vec<i8> = vec![6, 7, 8];
let d: Vec<i8> = vec![9, 10, 11];
let abc = a.iter().zip(b.iter()).zip(c.iter())
.map(|((&aa, &bb), &cc)| aa+bb+cc);
// (( , ), )
// ^~~~~~~~~~^~~~~~^ awkward!
let abcd = a.iter().zip(b.iter()).zip(c.iter()).zip(d.iter())
.map(|(((&aa, &bb), &cc), &dd)| aa+bb+cc+dd);
// ((( , ), ), )
// ^~~~~~~~~~~^~~~~~^~~~~~^ ughhh!
使用 multizip
,你可以获得 zip
的扁平化版本
let abc = multizip::zip3(a.iter(),
b.iter(),
c.iter())
.map(|(&aa, &bb, &cc)| aa+bb+cc))
// ( , , )
// ^~~~~~~~~~~~~~^ oooh!
let abcd = multizip::zip4(a.iter(),
b.iter(),
c.iter(),
d.iter())
.map(|(&aa, &bb, &cc, &dd)| aa+bb+cc+dd)
// ( , , , )
// ^~~~~~~~~~~~~~~~~~~^ sweet!
如何使用
TODO:上传到 crates.io 并在此处更新 Cargo 指令。
常见问题解答
我可以将多少个变量打包在一起?
Rust 支持在单个元组中最多 12 个变量,因此实现了以下功能: zip2()
, zip3()
, zip4()
..., zip12()
。
如果你需要超过 12 个,那么可能你的设计有问题。考虑使用比元组更合适的东西。
multizip::zip2()
与 std::iter::zip()
相比有什么优势?
唯一的优势是参数的对称性,例如 zip2(a.iter(), b.iter())
比 a.iter().zip(b.iter())
。
作者
Marc Dupont -- mdup.fr