## DEV Community is a community of 617,782 amazing developers

We're a place where coders share, stay up-to-date and grow their careers.

# Convert Rows to Columns with Ruby's Transpose Method

Meagan Waller Originally published at meaganwaller.com ・2 min read

The first time I used the `transpose` method, I was solving a particular problem. I was creating a tic-tac-toe game during my software apprenticeship. I had split up the game into a few classes. I had a class called `Board` that represented the tic-tac-toe board and was responsible for holding the board's state after each move. The `Board` class was initialized with an array called `spaces` to represent the board's spaces; the default was an array with nine spaces `[0, 1, 2, 3, 4, 5, 6, 7, 8]`. I had a method that would return the rows named `rows.`

``````def rows
[@spaces[0..2],
@spaces[3..5],
@spaces[6..8]]
end
``````

I also needed a method to give me the columns. I could have written something like this.

``````def columns
[@spaces[0], @spaces[3], @spaces[6],
@spaces[1], @spaces[4], @spaces[7],
@spaces[2], @spaces[5], @spaces[8]]
end
``````

But instead, my method took advantage of Ruby's `transpose` method.

``````def columns
rows.transpose
end
``````

Transpose turned my rows into columns, and this was a fair use case for this because I was able to create a method that held all the possible winning solutions for a game. You win by getting your marker in 3 consecutive spaces in tic-tac-toe, either across a row, a column or diagonally.

``````def winning_solutions
winning_solutions = []
rows.map { |row| winning_solutions << row }
columns.map { |col| winning_solutions << col }
winning_solutions << diagonal_ltr
winning_solutions << diagonal_rtl
end

def diagonal_ltr
[@spaces[0], @spaces[4], @spaces[8]]
end

def diagonal_rtl
[@spaces[2], @spaces[4], @spaces[6]]
end
``````

(Disclaimer for the above code: I wrote this code only months into my software journey, I would do things differently now.)

Transposing is perfect when you have a grid and want to transform the rows into columns for easy access.