如何使用 Ruby 旋转这个二维数组?

Jam*_*aal 1 ruby

我正在解决一些练习题以提高我的 Ruby 技能,我正在解决我必须将二维数组旋转 90 度的问题。这是输入:

image = [
        [1,2,3,4],
        [5,6,7,8],
        [9,0,1,2],
        [3,4,5,6]
    ]
Run Code Online (Sandbox Code Playgroud)

预期的输出是:

image = [
        [3,9,5,1],
        [4,0,6,2],
        [5,1,7,3],
        [6,2,8,4]
    ]
Run Code Online (Sandbox Code Playgroud)

这是我编写的代码,它打印出不正确的输出:

def matrix(image)
    y = image.length
    for i in 0..y-1
        for j in 0..y-1
            image[i][j] = image[i][y-j-1]
        end
    end
    image
end
Run Code Online (Sandbox Code Playgroud)

这是该代码的输出:

image = [
    [4, 3, 3, 4], 
    [8, 7, 7, 8], 
    [2, 1, 1, 2], 
    [6, 5, 5, 6]
]
Run Code Online (Sandbox Code Playgroud)

有人可以向我解释我做错了什么吗?

Aru*_*hit 6

我会使用Array#transpose

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

image.transpose.map(&:reverse)
# => [[3, 9, 5, 1], [4, 0, 6, 2], [5, 1, 7, 3], [6, 2, 8, 4]]
Run Code Online (Sandbox Code Playgroud)

  • @Jamaal 当这是一种实现目标的干净、高效、简单的方法时,为什么要坚持使用代码? (2认同)