如何根据另一个有序表对表进行排序?

时间:2016-08-23 02:22:56

标签: sorting lua lua-table

我有一个特定的表,其中包含自然数字键和字符串值,如{"192", "127", "114", "186"},它可以命名为有序表,而另一个表是有序表的子集但是不按顺序,例如{"114", "192"}。如何根据有序表格对后者进行排序?

1 个答案:

答案 0 :(得分:2)

您可以做的一件事是创建一个帮助表,将一个字符串映射到"有序表中的位置"。这允许您快速查看,给定两个字符串,它们应该出现在另一个字符串之前。

然后,您可以使用此帮助程序表来实现排序的比较功能。在Lua中,table.sort有一个可选参数,它是一个自定义比较函数。此比较函数应接受表格中的一对值(s1s2),如果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)