在操作lua表的时候发现如下特性,请大虾们指点下:
代码:
page0={[0]=10, y=45; "one", "two", "three"}
page1={[1]=10, y=45; "one", "two", "three"}
page2={10, y=45; "one", "two", "three"}
print("page0:")
print(page0[1])
print(page0[2])
print("page1:")
print(page1[1])
print(page1[2])
print("page2:")
print(page2[1])
print(page2[2])
输出:
page0:
one
two
page1:
one
two
page2:
10 (0xa)
one
为什么强制page1中指定了第一个元素的下标是[1]了,存储的却是one
那要怎么访问page1第一个元素?
------解决方案--------------------------------------------------------
你如果print(page1) 会发现10根本不在page1里
我也刚学Lua,只知道有这样的现象,没法解释原因
------解决方案--------------------------------------------------------
默认构造函数就是从1开始的,其他带有下标的,则不属于默认构造函数的范畴内,所以不会影响默认构造函数的下标
你这里要访问的第一个元素 这个"第一" 有点抽象
因为 要看你用什么顺序来排这个表了, lua默认的排序是从1开始按照自然数递增计算
但是 这样访问的话,不一定会遍历整个表 采用非自然数或者存在"hole"的表 在"hole"之后的元素也会访问不到
如果按照lua存储方法的话,那个第一 也有可能并不是你所想要的
所以 如果想要一个有序列表的话 你在生成这个表的时候就要考虑好表的结构了
比如
page1={ y=45; nil,"one", "two", "three",[1]=10,}
------解决方案--------------------------------------------------------
你指定[1]其实并不影响别的无指定的成员,
所以后面的第一个无指定的成员还是从1开始,就把前面的冲掉了
你如果想从0开始,可以用这样指定的方式构造一个从0开始的表
------解决方案--------------------------------------------------------
5楼说的我感觉是对的
尝试了一下输出所有的page1的结果:
> for k,v in pairs(page1) do print(k,v) end
1 one
2 two
3 three
y 45
说明在此表中已经没有10这个值了 当然它的键值也就不复存在的
所以我感觉5楼说的是对的