如何转置 Rust 中的向量向量? [英] How to transpose a vector of vectors in Rust?
本文介绍了如何转置 Rust 中的向量向量?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
所以我有一个 Vec
,其中第一个向量按天数分组,内部向量按天数分组.我想以某种方式转置向量,先按天再按小时.在 Rust 中有没有一种简单的方法可以做到这一点?
So I have a Vec<Vec<T>>
where the first vector groups by hours of day and the inner vector by days of week. I would like to transpose somehow the vectors to have it first by days then by hours. Is there a simple way to do it in Rust?
我的意思是,我知道如何使用 2 个 for 循环来实现,但是否有更智能/更短的方法来实现它的功能
I mean, I know how to do it with 2 for loops but is there a smarter/shorter way to do it functionally
推荐答案
你可以使用一些迭代器:
You can use some iterators:
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()
}
正如 user4815162342
评论的那样,这是一个没有 Clone
的版本:
As user4815162342
comments, here is a version without 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()
}
这篇关于如何转置 Rust 中的向量向量?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文