我无法理解为什么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
答案 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
中,x
和y
可以是list
的任意两个元素。 table.sort
必须多次调用此函数才能确定哪些元素被认为比其他元素少。如果没有compare
,table.sort
只会使用<
运算符。正如您在代码中看到的那样,compare
在决定是返回true还是false时引用record
表。 table.sort
只是在不了解compare
的情况下调用record
。