2013-03-11 111 views
2

我有如下表:排序嵌套表與盧阿

{ 
    STANDBY = { 
    timeout = "10", 
    mode = "0" 
    }, 
    RTP = { 
    minport = "10000", 
    maxport = "10010" 
    } 
} 

我想按字母順序排序,所以結果表應該是這樣的:

{ 
    RTP = { 
    maxport = "10010", 
    minport = "10000" 
    }, 
    STANDBY = { 
    mode = "0", 
    timeout = "10" 
    }, 
} 

你能幫幫我嗎?

+7

這些是同一張表。你的問題沒有意義。非整數鍵不會在Lua中有*訂單。 – 2013-03-11 09:13:37

回答

6

Programming in Lua : 19.3引用以下內容。

一個常見的錯誤是嘗試排序表的索引。在一張表格中,指數形成一個集合,並且沒有任何順序。如果您想訂購它們,您必須將它們複製到一個數組,然後對數組進行排序。

如果遍歷與pairs()的表,名稱以任意順序出現。但是,您無法直接對它們進行排序,因爲這些名稱是表格的關鍵字。

解決方法也在同一頁上提及。

local tableVarName = { 
    STANDBY = { 
     timeout = "10", 
     mode = "0" 
    }, 
    RTP = { 
     minport = "10000", 
     maxport = "10010" 
    } 
} 
function pairsByKeys (t, f) 
    local a = {} 
    for n in pairs(t) do table.insert(a, n) end 
    table.sort(a, f) 
    local i = 0  -- iterator variable 
    local iter = function() -- iterator function 
    i = i + 1 
    if a[i] == nil then return nil 
    else return a[i], t[a[i]] 
    end 
    end 
    return iter 
end 
for name, line in pairsByKeys(tableVarName) do 
    print(name, line) 
end 
+0

它打印:'RTP \t表:0041A268 STANDBY \t表:0041A208',這顯然不是什麼OP的whishes。 – 2013-03-11 10:39:38

+0

@EgorSkriptunoff遞歸使用相同的函數並不困難。人們總是可以使用'type(a)==「table」'條件來檢查。 – hjpotter92 2013-03-11 11:38:04