1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
trait VecUtils<T> {
    fn transpose(&self) -> Vec<Vec<T>>;
}

impl<T> VecUtils<T> for Vec<Vec<T>>
where
    T: Clone,
{
    fn transpose(&self) -> Vec<Vec<T>> {
        (0..self[0].len())
            .map(|j| {
                (0..self.len())
                    .map(|i| self[i][j].clone())
                    .collect::<Vec<T>>()
            })
            .collect::<Vec<Vec<T>>>()
    }
}

#[cfg(test)]
mod test {
    use super::*;

    #[test]
    fn vector_test() {
        let test = vec![vec![0, 1, 2, 3]; 2];

        assert_eq!(
            vec![vec![0, 0], vec![1, 1], vec![2, 2], vec![3, 3],],
            test.transpose()
        )
    }
}