有关table.insert的问题

我有一个问题,不理解 Lua 中的 table.insert。 参考 Wrox Beginning Lua Programming 书第129页,

--演示对关联表进行排序的方法。
NameToInstr = {John = “rhythm guitar”,
               Paul = “bass guitar”,
               George = “lead guitar”,
               Ringo = “drumkit”}

--将关联表NameToInstr转移到数组Sorted中:
Sorted = {}
for Name, Instr in pairs(NameToInstr) do
    table.insert(Sorted, {Name = Name, Instr = Instr})
end

--比较函数按名称排序:
table.sort(Sorted, function(A, B) return A.Name < B.Name end)

--输出:
for _, NameInstr in ipairs(Sorted) do
    print(NameInstr.Name .. “ played “ .. NameInstr.Instr)
end

我的问题是..

  1. 为什么我们需要进行 Name = Name 和 Instr = Instr 分配?
  2. 为什么这些分配需要放在这些“表构造函数”中?
  3. 在“- 比较函数按名称排序:”中,由于 A 和 B 之前没有被分配给任何值,所以这个“function(A,B)”是如何工作的?

万分感谢..(对不起,我的英语很糟糕)

点赞
用户646619
用户646619

table.insert 用于类似数组的表格;即,键从 1 到 n 的表格。它会在指定的整数索引处插入一个值,并将其余数组下移。

local t = {1, 2, 3}
table.insert(t, 2, "foo") -- t = {1, "foo", 2, 3}
table.insert(t, "bar")    -- t = {1, "foo", 2, 3, "bar"}

在您的示例中,该代码正在创建一个表格的数组,其中每个表都有一个 Name 和一个 Instr 字段。table.insert 只是将每个数组条目追加到数组的末尾。

2014-06-09 03:51:39
用户869951
用户869951
  1. 为什么我们需要进行 Name = NameInstr = Instr 的赋值?

    A: 赋值符号左边的部分是字段名称,右边的是要关联的值。语句 t={a=123, b=var}t 中的字段 a 关联到值 123,将 b 的字段与变量 var 的值关联(除非 var 本身是一个表,此时 bvar 所代表的表的引用相关联,但这是不直接相关于您的问题的一个单独问题)。所以在您的情况下,开发人员将键设置为与 for 循环变量具有相同的名称。

  2. 为什么这些赋值需要放在那些“表构造函数”中?

    A: 不确定您所说的“表构造函数”指的是什么,您在哪里看到它?

  3. 在 “ -- The comparison function sorts by Name: ” 中,由于 A 和 B 之前没有被分配任何值,所以“ function(A,B)” 是如何起作用的?

    A: 在排序期间,sort 函数将多次调用匿名函数,每次使用两个值 A 和 B,期望返回一个值,指示给定对中 A 是否小于 B。

2014-06-09 04:20:11