我想您可以为此使用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 中所述,您还可以使用stdlib 中的windows 并避免在您的项目中包含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]