rust - Rust 迭代器类似于 chunks()
问题描述
这个迭代器
let data = vec![0, 1, 2, 3, 4, 5];
for x in data.chunks(2) {
println!("{:?}", x);
}
会产生
[0, 1]
[2, 3]
[4, 5]
我可以使用迭代器来获得这样的东西吗?
[0, 1]
[1, 2]
[2, 3]
[3, 4]
[4, 5]
我知道如何使用 for 循环来做到这一点。但是迭代器可以做得更好吗?
解决方案
我想您可以为此使用 Itertools.tuple_windows。根据文档,它“在所有连续窗口上返回一个迭代器,生成特定大小的元组(最多 4 个)”:
use itertools::Itertools;
use itertools::TupleWindows;
use std::slice::Iter;
let data = vec![0, 1, 2, 3, 4, 5];
let it: TupleWindows<Iter<'_, i32>, (&i32, &i32)> = data.iter().tuple_windows();
for elem in it {
println!("{:?}", elem);
}
输出:
(0, 1)
(1, 2)
(2, 3)
(3, 4)
(4, 5)
编辑:正如@Masklinn的comment1 和@SebastianRedl的comment2 所述,您也可以windows
从stdlib 使用并避免包含Itertools
在您的项目中。但请注意,它仅适用于切片(或强制切片的事物),而不适用于一般迭代器(这在您的情况下很好)。
let data = vec![0, 1, 2, 3, 4, 5];
let it = data.windows(2);
for elem in it {
println!("{:?}", elem);
}
输出:
[0, 1]
[1, 2]
[2, 3]
[3, 4]
[4, 5]
推荐阅读
- image-processing - ImageMagick 使用 Stream 命令附加大文件
- mysql - 仅显示 FULL Columns 表的特定列
- angularjs - 无法在AngularJS中的标签内连接多个值
- java - Java 服务器端:发送 Http POST 响应 - 仅状态
- angularjs - 角度控制器中未检测到框架物理碰撞事件
- java - 将十六进制字符串转换为 int (JAVA)
- cordova - 在没有用户交互的情况下读取文件时,Ionic App 中 resolveLocalFileSystemURL 上的“SECURITY_ERR”
- regex - 将子域重写为根/子域
- javascript - 在AXIOS之后更新静态?Vue JS
- haskell - 我真的可以从同一个包中构建和运行一个可执行文件作为测试套件的一部分吗?