table.sort的哪些特性允许它按关联数组的值对数组进行排序?

时间:2014-06-17 00:33:25

标签: arrays sorting lua lua-table

我无法理解为什么record [x]会将它的键名称与数组中的字符串相匹配,然后将其值作为索引字符串的项目by ..这是table.sort的一些特殊功能吗?

list = {"b", "c", "a"}
record = {a = 1, b = 2, c = 3}
table.sort(list, function (x, y) return record[x] < record[y] end)
for _, v in ipairs(list) do print(v) end
>a
>b
>c

2 个答案:

答案 0 :(得分:2)

声明record = {a = 1, b = 2, c = 3}等同于

record = {}
record["a"] = 1
record["b"] = 2
record["c"] = 3

这应该清楚说明list中的值如何映射到record中的键。

答案 1 :(得分:2)

(我会将比较函数分解出来,以便于解释。)

list = {"b", "c", "a"}
record = {a = 1, b = 2, c = 3}
local function compare(x, y)
  return record[x] < record[y]
end
table.sort(list, compare)

在函数compare中,xy可以是list的任意两个元素。 table.sort必须多次调用此函数才能确定哪些元素被认为比其他元素少。如果没有comparetable.sort只会使用<运算符。正如您在代码中看到的那样,compare在决定是返回true还是false时引用record表。 table.sort只是在不了解compare的情况下调用record