table.sort有哪个功能可以使它通过关联数组的值来排序一个数组?

我无法理解为什么 record[x] 会将它的键名与数组中的字符串匹配,然后将其值作为索引字符串的项目..这是 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
点赞
用户107090
用户107090

语句 record = {a = 1, b = 2, c = 3} 等价于

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

这可以使得 list 中的值如何映射到 record 的键更加清晰明了。

2014-06-17 01:48:50
用户3574628
用户3574628

我将把比较函数分解出来,以便更容易解释。

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 的任何信息。

2014-06-17 03:36:00