Lua 中的 for 循环有两种形式:数值型遍历和泛型遍历。
1,数值型遍历
语法为:
for name=exp1, exp2 [,exp]
do
-- do something
end
[,exp] 这个不是必须的,是可选项。它表示步长,即从name=exp1 如何变化到 exp2,所以有可能是递增,也有可能是递减,主要由[,exp] 决定。
1)递增型
#!/usr/local/bin/luafor v = 1, 5, 1
doprint("v="..v);
end
以上的for循环,变量v从1增加到5,每次增加 1 个步长,即循环 5 次,结果如下:
如果步长是 2 的话,其结果如下:
如果没有步长,则默认就是 1。
2)递减型
#!/usr/local/bin/luafor v = 5, 1, -1
doprint("v="..v);
end
递减型只要把步长改成负数即可。
2,泛型遍历
这种方法一般用于遍历 table。
1)table 有key的时候
#!/usr/local/bin/lualocal config =
{DefaultHostIp = "192.168.1.108",DefaultNetMask = "255.255.255.0",DefaultGateway = "192.168.1.1",
};for key, value in pairs(config)
doprint("table_test["..key.."] = "..value);
end
这种table里的表项是有 key=value 对的,如果是没有key,而只有 value 项呢,该如果 for 循环遍历呢?
2)table 没有key的时候
#!/usr/local/bin/lualocal config =
{"192.168.1.108","255.255.255.0","192.168.1.1",
};for key, value in pairs(config)
doprint("table_test["..key.."] = "..value);
end
可以看到,此时默认的 key 就是 1,2,3, .....
3)利用 table 的大小
这个时候还可以这样打印出 table 的值:
#!/usr/local/bin/lualocal config =
{"192.168.1.108","255.255.255.0","192.168.1.1",
};for key, value in pairs(config)
doprint("table_test["..key.."] = "..value);
endfor index = 1, #(config)
doprint(index.." = "..config[index]);
end
其中 #(config) 是取 table 的大小,config[index] 当然就是 table 里的 value 了。