|
Lua 的基础库中提供了 pairs 和 ipars 两个函数,它们分别用于遍历 table 和 数组。
这里所说的数组,是索引值为 1,2,3,4...整数的数组,比如下面代码示例:
- days = {"sunday", "monday", "tuesday", "wednesday", "thursday", "friday", "saturday"};
- for i, v in ipairs(days) do
- print(i, v);
- end
复制代码
程序会输出:
1 sunday
2 monday
3 tuesday
4 wednesday
5 thursday
6 friday
7 saturday
在每次循环中,i 会被赋予一个索引值,同时 v 被赋予一个对应于该索引的数组元素值。
对于上面程序,将 iparis() 函数换成 pairs() 仍然有效。但是,如果将 days 这种普通的数组换成 table 样式,如:
Days = {["sunday"]=1, ["monday"]=2, ["tuesday"]=3, ["wednesday"]=4, ["thursday"]=5, ["friday"]=6, ["saturday"]=7};
在这种情况下,ipairs() 将无法输出任何内容。如果注意到,ipairs() 和 pairs() 前面只有一个字母 'i' 的区别,i 实际是整数 integer 的头字母,也就意味着这个函数是用来遍历索引值为正数的数组。因此,对于 Days 这种 table ,我们需要用 pairs() 来遍历它,比如:
- Days = {["sunday"]=1, ["monday"]=2, ["tuesday"]=3, ["wednesday"]=4, ["thursday"]=5, ["friday"]=6, ["saturday"]=7};
- for i, v in pairs(Days) do
- print(i, v);
- end
复制代码
输出结果:
saturday 7
tuesday 3
wednesday 4
friday 6
sunday 1
thursday 5
monday 2
然而,这个并非如你想象的那样,是顺序输出的。因此可以想象,table 中的这些 key 和 value 是如哈希表一样存放数据。若你希望按照顺序输出,那么需要自己用程序来处理,比如:
- Days = {["sunday"]=1, ["monday"]=2, ["tuesday"]=3, ["wednesday"]=4, ["thursday"]=5, ["friday"]=6, ["saturday"]=7};
- i = 1;
- function print_kv (Days)
- for k, v in pairs(Days) do
- if v == i then
- i = i + 1
- print (k, v)
- end
- end
- end
- while (i ~= 8) do
- print_kv ( Days )
- end
复制代码
运行输出:
i = 1;
function print_kv (Days)
for k, v in pairs(Days) do
if v == i then
i = i + 1
print (k, v)
end
end
end
while (i ~= 8) do
print_kv ( Days )
end
|
|