有没有比vec![a,b,c].into_iter()更简洁的临时迭代器创建方式?
优化
vec![a, b, c].into_iter()的简洁写法 最直接的优化方案是用栈上数组替代堆分配的Vec,写成[a, b, c].into_iter()——既省去了堆内存分配的开销,语法上也更简洁,完全兼容kmerge的使用场景。
修改后的示例代码:
use itertools::Itertools; let a = (0..6).step(3); let b = (1..6).step(3); let c = (2..6).step(3); let it = [a, b, c].into_iter().kmerge(); itertools::assert_equal(it, vec![0, 1, 2, 3, 4, 5]);
如果你想要类似iter![a,b,c]的宏写法,也可以自己定义一个极简宏,实现完全相同的效果:
macro_rules! iter { ($($elem:expr),+ $(,)?) => { [$($elem),+].into_iter() }; } // 使用方式 let it = iter![a, b, c].kmerge();
注意:如果你的迭代器数量是动态的(编译期无法确定),那还是需要用Vec;但对于固定数量的几个迭代器,数组写法是性能和简洁度都最优的选择。
内容的提问来源于stack exchange,提问作者Carl
相关产品推荐
相关产品推荐

