Jea*_*ett 9 iterator cycle rust
如何在迭代器中循环有限次?
我希望这样的输出是1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3然后停止:
vec![1, 2, 3].iter().cycle(4)
// ^ but .cycle() doesn't take an argument...
Run Code Online (Sandbox Code Playgroud)
我不知道迭代器的长度。
edw*_*rdw 11
一种简单的方法是重复迭代器本身,取前 4 个并展平:
fn main() {
let v = vec![1, 2, 3];
let res = std::iter::repeat(v.iter())
.take(4)
.flatten()
.collect::<Vec<_>>();
dbg!(res);
}
Run Code Online (Sandbox Code Playgroud)
使用此要点中的代码比较 3 种不同方法的一些微基准测试结果:
cycle_n实现模仿Iterator::cycle.值得称赞的是rustc,cycle_n当输入相当大时,始终优于其他两个,而 repeat-take-flatten 在小输入时表现最佳。
| 归档时间: |
|
| 查看次数: |
1289 次 |
| 最近记录: |