关于table.insert的问题

时间:2014-06-09 03:17:29

标签: lua

我在Lua中了解table.insert有问题。 参考Wrox Beginning Lua Programming book 129页,

 --A demonstration of sorting an associative table.
 NameToInstr = {John = “rhythm guitar”,
 Paul = “bass guitar”,
 George = “lead guitar”,
 Ringo = “drumkit”}

 --Transfer the associative table NameToInstr to the
 --array Sorted:
 Sorted = {}
 for Name, Instr in pairs(NameToInstr) do
 table.insert(Sorted, {Name = Name, Instr = Instr})
 end

 --The comparison function sorts by Name:
 table.sort(Sorted, function(A, B) return A.Name < B.Name end)

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

我的问题将是......

  1. 为什么我们需要进行Name = Name和Instr = Instr赋值?
  2. 为什么需要将这些作业放在那些“表格构造函数”中?
  3. 在“ - 比较函数按名称排序:”中,“函数(A,B)”如何工作,因为A和B之前未分配给任何值
  4. 非常感谢...(对不起我的英语不好)

2 个答案:

答案 0 :(得分:0)

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只是将每个数组条目附加到数组的末尾。

答案 1 :(得分:0)

  1. 为什么我们需要进行Name = Name和Instr = Instr赋值?

    答:作业左侧的部分是字段名称,右侧的部分是要关联的值。声明t={a=123, b=var}a中的字段t与值123相关联,并将该表中的字段b与名为var的变量的值相关联(除非var本身就是一个表格,否则bvar标识的表格的引用相关联,但这是一个与您的问题没有直接关系的单独问题)。因此,在您的情况下,开发人员将密钥设置为与for循环变量具有相同的名称。

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

    答:不确定“表构造函数”是什么意思,你在哪里看到的?

  3. 在“ - 比较函数按名称排序:”中,“函数(A,B)”如何工作,因为A和B之前未分配给任何值

    答:sort函数在排序时会多次调用匿名函数,每次都有两个值,一个用于A,一个用于B,期望一个返回值,指示A是否小于给定的B对