我有一个特定的表,其中包含自然数字键和字符串值,如{"192", "127", "114", "186"}
,它可以命名为有序表,而另一个表是有序表的子集但是不按顺序,例如{"114", "192"}
。如何根据有序表格对后者进行排序?
答案 0 :(得分:2)
您可以做的一件事是创建一个帮助表,将一个字符串映射到"有序表中的位置"。这允许您快速查看,给定两个字符串,它们应该出现在另一个字符串之前。
然后,您可以使用此帮助程序表来实现排序的比较功能。在Lua中,table.sort
有一个可选参数,它是一个自定义比较函数。此比较函数应接受表格中的一对值(s1
和s2
),如果true
根据您所需的顺序,则应返回s1 < s2
。
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)