Computer >> 컴퓨터 >  >> 프로그램 작성 >> Ruby

Ruby Transpose 메서드를 사용하여 행을 열로 변환

오늘은 Ruby transpose 방법을 사용하여 Ruby에서 그리드를 처리하는 방법을 배울 것입니다.

다차원 배열 형태의 완벽한 그리드(예:3×3 정사각형)가 있다고 상상해 보세요.

그리고 행을 가져와 열로 변환하려는 경우 .

왜 그렇게 하시겠습니까?

한 가지 용도는 고전 게임인 tic-tac-toe입니다.

보드를 그리드로 저장합니다. 그런 다음 승리한 움직임을 찾으려면 을 확인해야 합니다. , &대각선 .

문제는 그리드를 배열로 저장하는 경우 행에만 직접 액세스할 수 있다는 것입니다.

열렬한 방법

"직접 액세스"란 배열을 탐색할 수 있음을 의미합니다(each , map 등) 필요 이상으로 배열 인덱싱을 사용하지 않아도 됩니다.

예를 들어봅시다!

그리드가 있습니다 :

grid = [
  [1,2,3],
  [4,5,6],
  [7,8,9]
]

여기에 내가 만든 영상이 있습니다. :

Ruby Transpose 메서드를 사용하여 행을 열로 변환

인덱스를 참조하여 열을 얻을 수 있습니다.

예를 들어 첫 번째 열은 :

[grid[0][0], grid[1][0], grid[2][0]]

# [1, 4, 7]

하지만 첫 번째 행은 이것뿐입니다. :

grid[0]

# [1, 2, 3]

행 작업만큼 쉽게 열 작업을 수행할 수 있는 방법은 무엇입니까?

칼럼 쉬운 방법

이를 수행하는 쉬운 방법은 Array#transpose 메서드를 사용하는 것입니다.

:

columns = grid.transpose

네, 이것만 하시면 됩니다!

이제 다음과 같은 첫 번째 열을 얻을 수 있습니다.

columns[0]

# [1, 4, 7]

보시다시피 방법을 많이 알면 작업을 많이 줄일 수 있습니다 🙂

틱택토

전체를 설명하지는 않겠습니다. 이 방법을 실제 프로젝트에 어떻게 적용할 수 있는지 보여드리고 싶습니다.

틱택토 게임에서 이기려면 행, 열 또는 대각선을 채워야 합니다.

행 확인을 위한 코드는 다음과 같습니다. :

def check_rows
  @board.each { |row| return row.first if all_equal?(row) }
end

다음은 열에 대한 코드입니다. :

def check_columns
  @board.transpose.each { |row| return row.first if all_equal?(row) }
end

유일한 차이점은 transpose 방법!

다음은 all_equal?입니다. 방법:

def all_equal?(row)
   return if row.first == nil

   row.each_cons(2).all? { |x,y| x == y }
 end

Enumerable 메서드에 대한 이 게시물을 읽으면 each_cons 메서드에 대해 자세히 알아볼 수 있습니다.

요약

조옮김 방법에 대해 배웠습니다.

완벽한 그리드가 주어지면 transpose를 사용하면 쉽게 액세스할 수 있도록 행을 열로 변환할 수 있습니다.

이 게시물이 마음에 드셨다면 제 책 Ruby Deep Dive를 구입하는 것이 좋습니다.