2016-08-23 77 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) 
相关问题