试图理解《 Lua编程》(第四版)中的练习5.1
其中包含代码,但我不知道发生了什么
sunday = "monday" ; monday = "sunday"
print("After first line ", sunday, monday)
t = {sunday = "monday", [sunday] = monday}
print("Printing #t", #t)
for k = 1 , #t do
print(k, t[k])
end
print("After printing ipairs")
print(t.sunday, t[sunday], t[t.sunday])
我得到的结果如下:-
星期一第一天星期一之后
打印#t 0
印刷完配对后
星期一星期日星期日
基本上是第3行使我感到困惑。为什么t中的元素数为零??
答案 0 :(得分:1)
表t的长度定义为任何整数索引n,以使t [n]不为nil,t [n + 1]为nil;此外,如果t 1为零,则n可以为零。对于具有从1到给定n的非零值的常规数组,其长度恰好是n(其最后一个值的索引)。如果数组具有“空洞”(即,其他非nil值之间的nil值),则#t可以是直接在nil值之前的任何索引(也就是说,它可以将任何此类nil值视为末尾)数组)。
要使用#运算符正确获取表的长度,必须使用整数对表进行索引并且该表必须是顺序的。例如:t = {[1] = "monday", [2] = monday}
在您的情况下,表的键是字符串。有一些方法可以遍历非顺序表,其中一种方法是使用函数pairs
。
t = {sunday = "monday", [sunday] = monday}
for k, v in pairs(t) do
print(k, v)
end
同样,要获得非顺序表的长度,可以遍历该表并计算元素数。 How to get number of entries in a Lua table?