当前位置: 代码迷 >> 其他开发语言 >> 有关LUA表的有关问题
  详细解决方案

有关LUA表的有关问题

热度:3290   发布时间:2013-02-26 00:00:00.0
有关LUA表的问题
在操作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楼说的是对的
  相关解决方案