我在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
我的问题将是......
非常感谢...(对不起我的英语不好)
答案 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)
为什么我们需要进行Name = Name和Instr = Instr赋值?
答:作业左侧的部分是字段名称,右侧的部分是要关联的值。声明t={a=123, b=var}
将a
中的字段t
与值123相关联,并将该表中的字段b
与名为var
的变量的值相关联(除非var
本身就是一个表格,否则b
与var
标识的表格的引用相关联,但这是一个与您的问题没有直接关系的单独问题)。因此,在您的情况下,开发人员将密钥设置为与for
循环变量具有相同的名称。
为什么需要将这些赋值放在那些“表构造函数”中?
答:不确定“表构造函数”是什么意思,你在哪里看到的?
在“ - 比较函数按名称排序:”中,“函数(A,B)”如何工作,因为A和B之前未分配给任何值
答:sort
函数在排序时会多次调用匿名函数,每次都有两个值,一个用于A,一个用于B,期望一个返回值,指示A是否小于给定的B对