2017-09-29 6 views
-3

のは、私は、テーブルXを持っているとしましょう:Luaのテーブルを回転させる?

{ 
    {1,1,1}, 
    {1,0,0}, 
    {1,1,1} 
} 

私の目標は、それが表Yに変わるように、Xを「回転」することです:

{ 
    {1,1,1}, 
    {1,0,1}, 
    {1,0,1} 
} 
ソリューションも動作するかどう

私も希望Zのような非対称テーブルの場合:

{ 
    {1,1,1}, 
    {1,0,0}, 
    {1,1,1}, 
    {1,1,0} 
} 

この作業は、Vanilla Lua 5.1、追加なしで行ってください。

+0

は、スタックオーバーフローのコミュニティへようこそ。この投稿は明快で簡潔で正確ですが、このサイトが何であるかはまったく分かりません。私たちは助けに来ました。しないでください。サイトと[ヘルプセンター](https://stackoverflow.com/help/asking)の詳細をご覧ください。 –

+1

この操作は転置と呼ばれます。 – lhf

答えて

0
function transpose(m) 
    local rotated = {} 
    for c, m_1_c in ipairs(m[1]) do 
     local col = {m_1_c} 
     for r = 2, #m do 
     col[r] = m[r][c] 
     end 
     table.insert(rotated, col) 
    end 
    return rotated 
end 

function rotate_CCW_90(m) 
    local rotated = {} 
    for c, m_1_c in ipairs(m[1]) do 
     local col = {m_1_c} 
     for r = 2, #m do 
     col[r] = m[r][c] 
     end 
     table.insert(rotated, 1, col) 
    end 
    return rotated 
end 

function rotate_180(m) 
    return rotate_CCW_90(rotate_CCW_90(m)) 
end 

function rotate_CW_90(m) 
    return rotate_CCW_90(rotate_CCW_90(rotate_CCW_90(m))) 
end 

使用例:

local m1 = { 
    {1,1,1}, 
    {1,0,0}, 
    {1,1,1}, 
    {1,1,0} 
} 

local m2 = rotate_CCW_90(m1) 
-- m2 now is { 
-- {1, 0, 1, 0}, 
-- {1, 0, 1, 1}, 
-- {1, 1, 1, 1} 
-- } 

local m3 = transpose(m1) 
-- m3 now is { 
-- {1, 1, 1, 1}, 
-- {1, 0, 1, 1}, 
-- {1, 0, 1, 0} 
-- } 
関連する問題