competitive_hpp/utils/
vecvec.rs1pub trait VecVecUtils<T> {
2 fn transpose(&self) -> Vec<Vec<T>>;
3}
4
5impl<T> VecVecUtils<T> for Vec<Vec<T>>
6where
7 T: Clone,
8{
9 fn transpose(&self) -> Vec<Vec<T>> {
10 (0..self[0].len())
11 .map(|j| {
12 (0..self.len())
13 .map(|i| self[i][j].clone())
14 .collect::<Vec<T>>()
15 })
16 .collect::<Vec<Vec<T>>>()
17 }
18}
19
20#[cfg(test)]
21mod test {
22 use super::*;
23
24 #[test]
25 fn vecvec_test() {
26 let test = vec![vec![0, 1, 2, 3]; 2];
27
28 assert_eq!(
29 vec![vec![0, 0], vec![1, 1], vec![2, 2], vec![3, 3],],
30 test.transpose()
31 )
32 }
33}