From 7098cee26f7362496ff4159df96382b17f24d239 Mon Sep 17 00:00:00 2001 From: Junfeng Liu Date: Wed, 21 Jul 2021 18:15:14 +0800 Subject: [PATCH 1/2] Add transpose() method --- src/lib.rs | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/lib.rs b/src/lib.rs index c2fc7f7..e078ac4 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -624,6 +624,21 @@ impl Grid { pub fn into_vec(self) -> Vec { self.data } + + /// Transpose the grid so that columns become rows in new grid. + pub fn transpose(&self) -> Grid { + let mut data = Vec::with_capacity(self.data.len()); + for c in 0..self.cols { + for r in 0..self.rows { + data.push(self[r][c].clone()); + } + } + Grid { + data, + cols: self.rows, + rows: self.cols, + } + } } impl Clone for Grid { From 0a862b7ed9a1efb7a467cc565a553c79c3008e44 Mon Sep 17 00:00:00 2001 From: Junfeng Liu Date: Fri, 23 Jul 2021 14:34:27 +0800 Subject: [PATCH 2/2] Test transpose method --- src/lib.rs | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/lib.rs b/src/lib.rs index e078ac4..f83869b 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1141,4 +1141,10 @@ mod test { let grid = Grid::init(1, 2, 3); assert_eq!(grid.size(), (1, 2)); } + + #[test] + fn transpose() { + let grid: Grid = grid![[1,2,3][4,5,6]]; + assert_eq!(format!("{:?}", grid.transpose()), "[[1, 4][2, 5][3, 6]]"); + } }