发布于 2019-03-12 03:55:17
pairs()
和ipairs()
略有不同。
pairs()
返回键值对,主要用于关联表。未指定按键顺序。ipairs()
返回索引值对,主要用于数值表。数组中的非数字键被忽略,而索引顺序是确定的(按数字顺序)。下面的代码片段说明了这一点。
> u={}
> u[1]="a"
> u[3]="b"
> u[2]="c"
> u[4]="d"
> u["hello"]="world"
> for key,value in ipairs(u) do print(key,value) end
1 a
2 c
3 b
4 d
> for key,value in pairs(u) do print(key,value) end
1 a
hello world
3 b
2 c
4 d
>
当您创建一个没有键的表时(如您的问题所示),它的行为就像一个数字数组,行为或对和i对是相同的。
a = {"one", "two", "three"}
等同于a[1]="one"
a[2]="two"
a[3]="three"
和pairs()
和ipairs()
将是相同的(除了在pairs()
中不保证的排序)。
发布于 2019-03-12 03:47:40
在Lua中没有array
-type,只有从索引1开始可能有连续元素的table
s。
与数字for循环不同,通用for循环需要三个值:
它使用context-value和index-value调用callable,将所有返回值存储在提供的新变量中。第一个被附加地保存为新的索引值。
下面是循环的一些典型的可调用示例:
ipairs(t)
返回一个函数、表t
和起始点0
。该函数在道德上等同于:
函数ipairs_next(t,i) i=i+1var v= ti如果v ~= nil,则返回i,v end end
因此,从1开始直到第一个缺失的所有数值条目都被shown.
pairs(t)
委托给t
的元表,特别是__pairs(t)
,或者返回函数next
、表t
和起始点nil
。next
接受一个表和一个索引,并返回下一个索引和相关值(如果存在)。因此,所有元素都以某种任意的顺序显示。
有关用户编写的callable的示例,以及如果第一个值实际上不是callable时某些方言的反应,请参见"“。
https://stackoverflow.com/questions/55108794
复制相似问题