定义数组
取名为muq.lua,作为数据资源
数组也看作一张表,lua的for循环中,我的理解是k为有序的序号值(第几个),v为表的行
local tmp = {
{
id = 1001,
name = '张三',
male = true,
},
{
id = 1002,
name = '李四',
male = true,
},
{
id = 1003,
name = '李四1',
male = false,
},
{
id = 1004,
name = '李四2',
male = true,
},
}
return tmp
定义测试类
local tmp = require("muq") --接收数据资源
for k,v in pairs(tmp)do --循环tmp(不同于ipair,下面会比对)
print(k,":",v)
end
for i=1,10 do --添加1到10至tmp中
table.insert(tmp,i)
end
for k,v in pairs(tmp)do --打印出来
print(k,":",v)
end
把tmp中male相同的值的数据放一张表
local tmp1 = {}
local tmp2 = {}
for k,v in pairs(tmp)do
if v.male ==true then
table.insert(tmp1,v)
print(tmp1)
elseif
v.male ==false then
table.insert(tmp2,v)
--print(tmp2)
end
end
对比pairs和ipairs
ipairs为有迭代器的for循环,即为hash表,我理解为固定的有序循环,即(1,x),(2,x),(3,x)……..
其中k为数字number类型,且自行叠加匹配,直至循环到nil(为空值)结束。
直接上代码。。。==
--定义一个tmp
local tmp = {
["1"]=1,
["2"]="a",
["nil"]= 2,
["d"]=3,
['cccc']=4,
}
--pairs循环
for k,v in pairs(tmp) do
print(k,v)
end
结果为:
1 1
nil 2
2 a
d 3
cccc 4
可以看的出来无论k为什么类型,都会老老实实的打印出表中数据
同样定义一个表(数组)
local tmp = {
[8]=0,
[1]=1,
[2]=2,
[3]="a",
["1"]=1,
[4]=3,
[6]=2,
}
用ipairs循环
for k,v in ipairs(tmp) do
print(k,v)
end
结果为
1 1
2 2
3 a
4 3
可以看出,拥有迭代器的ipairs循环只会循环k值为number类型且从1自加直到为空时停止