competitive_hpp/utils/
vecvec.rs

1pub 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}