2016-08-23 78 views
2

我有一個具有自然數字鍵和字符串值的具體表,如{"192", "127", "114", "186"},它可以被命名爲有序表,並且還有另一個表是有序表的子集,但是沒有順序,例如{"114", "192"}。我如何根據訂購的表格對後者進行排序?如何根據另一個有序表格對錶格進行排序?

+0

無法將字符串值轉換爲數字 –

回答

2

你可以做的一件事是創建一個幫助表,將一個字符串映射到它在「有序表」中的位置。這可以讓你快速看到,給出兩個字符串,應該出現在另一個之前。

然後,您可以使用此幫助程序表爲您的排序實施比較功能。在Lua中,table.sort有一個可選參數,它是一個自定義比較函數。該比較功能應該接受來自表格(s1s2)的一對值,並且如果s1 < s2根據您希望的順序應該返回true

ordered_table = {"192", "127", "114", "186"} 

indexes = {} 
for i, s in ipairs(ordered_table) do 
    indexes[s] = i 
end 

unordered_table = {"114", "192"} 
table.sort(unordered_table, function(s1, s2) 
    local i1 = assert(indexes[s1]) 
    local i2 = assert(indexes[s2]) 
    return i1 < i2 
end) 
相關問題