我试图将一个向量迭代为一对块(在我的例子中,它是一个表示为连续位图的图像,我希望能够同时访问两行中的像素).
问题是我做不到.chunks(w).chunks(2),但必须在两者之间创建一个临时向量.
有没有办法纯粹使用迭代器?(如果结果是迭代器本身,我很好)
let input: Vec<_> = (0..12).collect();
let tmp: Vec<_> = input.chunks(3).collect();
let result: Vec<_> = tmp.chunks(2).collect();
println!("{:?}", result);
Run Code Online (Sandbox Code Playgroud)
[[[0,1,2],[3,4,5]],[[6,7,8],[9,10,11]]]
这是一种创建两个迭代器的解决方案,一个用于奇数行,一个用于偶数行。然后使用 将两者结合起来.zip(),这给出了一个充满对的迭代器:
fn main() {
let input: Vec<_> = (0..12).collect();
let it1 = input
.chunks(3)
.enumerate()
.filter_map(|x| if x.0 % 2 == 0 { Some(x.1) } else { None });
let it2 = input
.chunks(3)
.enumerate()
.filter_map(|x| if x.0 % 2 != 0 { Some(x.1) } else { None });
let r: Vec<_> = it1.zip(it2).collect();
println!("{:?}", r);
}
Run Code Online (Sandbox Code Playgroud)
哦,我知道了!我可以分割更大的块:
input.chunks(2*3).map(|dbl| dbl.split_at(3)).collect();
是的,或者你可以这样做:
let tmp: Vec<_> = input
.chunks(2 * 3)
.map(|x| x.chunks(3).collect::<Vec<_>>())
.collect();
Run Code Online (Sandbox Code Playgroud)
这输出与您的示例完全相同,没有您的解决方案中的元组和数组的混合:
[[[0, 1, 2], [3, 4, 5]], [[6, 7, 8], [9, 10, 11]]]
Run Code Online (Sandbox Code Playgroud)
哦,我明白了!我可以分割更大的块:
input
.chunks(2 * 100)
.map(|pair| pair.split_at(100))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2931 次 |
| 最近记录: |