所以我有一个Vec<Vec<T>>第一个向量按天数分组,内部向量按天数分组。我想以某种方式转置向量,先按天再按小时。有没有一种简单的方法可以在 Rust 中做到这一点?
编辑:我的意思是,我知道如何用 2 个 for 循环来做,但是有没有更智能/更短的方法来实现它的功能
您可以使用一些迭代器:
fn transpose<T>(v: Vec<Vec<T>>) -> Vec<Vec<T>>
where
T: Clone,
{
assert!(!v.is_empty());
(0..v[0].len())
.map(|i| v.iter().map(|inner| inner[i].clone()).collect::<Vec<T>>())
.collect()
}
Run Code Online (Sandbox Code Playgroud)
作为user4815162342评论,这是一个没有的版本Clone:
fn transpose2<T>(v: Vec<Vec<T>>) -> Vec<Vec<T>> {
assert!(!v.is_empty());
let len = v[0].len();
let mut iters: Vec<_> = v.into_iter().map(|n| n.into_iter()).collect();
(0..len)
.map(|_| {
iters
.iter_mut()
.map(|n| n.next().unwrap())
.collect::<Vec<T>>()
})
.collect()
}
Run Code Online (Sandbox Code Playgroud)