关于table的一些疑惑(1)

1.

(1)

lines={
   luaH_set=10,
   luaH_get=24,
   luaH_present=48,
}
a={}
for n in pairs(lines) do table.insert(a,n) end----->>循环遍历lines,将lines中的值插入名为a的table中
for i,n in ipairs(a) do print(n) end

结果:

luaH_present
luaH_set
luaH_get

for key,val in pairs(a) do print(val) end

结果:
luaH_present
luaH_set
luaH_get

 

(2)

table.sort(a)------->>如果加了排序,则pairs和ipairs的结果又不一样的,如下

for i,n in ipairs(a) do print(n) end

结果:

luaH_get
luaH_present
luaH_set

for key,val in pairs(a) do print(val) end

结果:

luaH_get
luaH_present
luaH_set

 

(3)

function pairsByKeys(t,f)
   local a={}
   for n in pairs(t) do table.insert(a,n) end
   table.sort(a,f)
   local i=0
   local iter=function()
      i=i+1
      if a[i]==nil then return nil
      else return a[i],t[a[i]]
      end
   end
   return iter
end

for name,line in pairsByKeys(lines) do
   print(name,line)
end

 结果:

luaH_get 24
luaH_present 48
luaH_set 10

 

 

2.pairs和ipairs的区别:

   for k,v in pairs(tbtest) do 这样的遍历顺序并非是tbtest中table的排列顺序,
  而是根据tbtest中key的hash值排列的顺序来遍历的。当然,同时lua也提供了按照
  key的大小顺序来遍历的,注意,是大小顺序,仍然不是key定义的顺序,这种遍历
  方式就是for k,v in ipairs(tbtest) do。
  for k,v in ipairs(tbtest) do 这样的循环必须要求tbtest中的key为顺序的,而
  且必须是从1开始,ipairs只会从1开始按连续的key顺序遍历到key不连续为止。

转载于:https://my.oschina.net/u/2297609/blog/368592

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值