Vector 可以用迭代器将向量分成10个组吗?
我有Vector 可以用迭代器将向量分成10个组吗?,vector,iterator,rust,Vector,Iterator,Rust,我有let my_vec=(0..25)。collect:()我想将my_vec拆分为10组迭代器: [0,1,2,3,4,5,6,7,8,9]; [10, 11, 12, 13, 14, 15, 16, 17, 18, 19]; [20,21,22,23,24,无,无,无,无,无]; 使用Rust中的迭代器可以做到这一点吗?在直接调用上没有这样的助手方法。但是,有两种主要方法: 使用(可直接在Vec上调用)。然而,它有一个微小的区别:它不会产生None,但最后一次迭代会产生一个较小的切片 :
let my_vec=(0..25)。collect:()
我想将my_vec
拆分为10组迭代器:
[0,1,2,3,4,5,6,7,8,9];
[10, 11, 12, 13, 14, 15, 16, 17, 18, 19];
[20,21,22,23,24,无,无,无,无,无];
使用Rust中的迭代器可以做到这一点吗?在直接调用上没有这样的助手方法。但是,有两种主要方法:
Vec
上调用)。然而,它有一个微小的区别:它不会产生None
,但最后一次迭代会产生一个较小的切片
:
迭代器
特性,因此此chunks()
方法适用于所有迭代器!请注意,为了达到通用性,用法稍微复杂一些。这与上面描述的方法具有相同的行为:在上一次迭代中,区块将更小,而不是包含None
s
:
您可以实现与仅使用标准库类似的解决方案:
let my_vec = (0..25).collect::<Vec<_>>();
let mut my_values = my_vec.into_iter().peekable();
while my_values.peek().is_some() {
let chunk: Vec<_> = my_values.by_ref().take(10).collect();
println!("{:?}", chunk);
}
如果实际上不需要每个块的Vec
,可以省略collect
调用,直接对by_ref
创建的迭代器进行操作
另见:
extern crate itertools;
use itertools::Itertools;
for chunk in &(0..25).chunks(10) {
println!("{:02?}", chunk.collect::<Vec<_>>());
}
let my_vec = (0..25).collect::<Vec<_>>();
let mut my_values = my_vec.into_iter().peekable();
while my_values.peek().is_some() {
let chunk: Vec<_> = my_values.by_ref().take(10).collect();
println!("{:?}", chunk);
}