提问人:Anopt 提问时间:11/17/2023 最后编辑:Anopt 更新时间:11/18/2023 访问量:66
在不使用时如何去除迭代中的无关(0..)?
How to get rid of extraneous (0..) in iteration when its not used?
问:
我想出了以下函数来转置一个:Vec<Vec<T>>
fn transpose<T>(v: Vec<Vec<T>>) -> Vec<Vec<T>> {
let mut xs = v.into_iter().map(|x| x.into_iter()).collect::<Vec<_>>();
(0..)
.map_while(|_| xs.iter_mut().map(|x| x.next()).collect())
.collect()
}
的值未使用,但锚定迭代器。我可以把任何东西放在那里。但是,是否可以对其进行重组,使其没有无用的迭代器呢?(0..)
答:
4赞
kmdreko
11/18/2023
#1
您可以使用 std::iter::from_fn
:
创建一个新的迭代器,其中每次迭代都会调用提供的闭包。
F: FnMut() -> Option<T>
fn transpose<T>(v: Vec<Vec<T>>) -> Vec<Vec<T>> {
let mut xs = v.into_iter().map(|x| x.into_iter()).collect::<Vec<_>>();
std::iter::from_fn(|| xs.iter_mut().map(|x| x.next()).collect()).collect()
}
评论
0赞
Anopt
11/18/2023
甜蜜的,没想到。
评论
std::iter::repeat(())
0..
i32::MAX
repeat
(0..)
repeat(())