pairs 、ipairs 都可以遍历 数组和表 的key并返回 key 与其对应的值
不同之处:
ipairs:
1、ipairs 遍历的key 只能是数字,并且数字是从1开始切连续的。
2、ipairs 返回按照 key 的升序返回
pairs:
返回按照数据定义或者插入的顺序返回。
例1- 遍历数组:
function TraversalTable(tb,func)
print("========== traversalTable =============")
for key,value in func(arr) do
print("key:",key,"value:",value)
end
end
arr = {1,2,3,4,5,6}
TraversalTable(arr,pairs)
TraversalTable(arr,ipairs)
========== TraversalTable 输出 =============
key: 1 value: 1
key: 2 value: 2
key: 3 value: 3
key: 4 value: 4
key: 5 value: 5
key: 6 value: 6
========== TraversalTable 输出 =============
key: 1 value: 1
key: 2 value: 2
key: 3 value: 3
key: 4 value: 4
key: 5 value: 5
key: 6 value: 6
例2-遍历表:
function TraversalTable(tb,func)
print("========== TraversalTable 输出 =============")
for key,value in func(arr) do
print("key:",key,"value:",value)
end
end
arr = {[0]=2,[1]=1,[2]=2,[3]=3}
TraversalTable(arr,pairs)
TraversalTable(arr,ipairs)
========== TraversalTable 输出 =============
key: 0 value: 2
key: 2 value: 2
key: 3 value: 3
key: 1 value: 1
========== TraversalTable 输出 =============
--- 此处没有打印 key = 0 的元素
key: 1 value: 1
key: 2 value: 2
key: 3 value: 3
例3-遍历表:
function TraversalTable(tb,func)
print("========== TraversalTable 输出 =============")
for key,value in func(arr) do
print("key:",key,"value:",value)
end
end
arr = {['a']=2,['b']=1,['c']=2,['d']=3}
TraversalTable(arr,pairs)
TraversalTable(arr,ipairs)
========== TraversalTable 输出 =============
key: a value: 2
key: d value: 3
key: c value: 2
key: b value: 1
========== TraversalTable 输出 =============
ipairs 没有输出
例4-遍历表:
function TraversalTable(tb,func)
print("========== TraversalTable 输出 =============")
for key,value in func(arr) do
print("key:",key,"value:",value)
end
end
arr = {['a']=2,['b']=1,[2]=2,[3]=3}
TraversalTable(arr,pairs)
TraversalTable(arr,ipairs)
========== TraversalTable 输出 =============
key: a value: 2
key: 2 value: 2
key: 3 value: 3
key: b value: 1
========== TraversalTable 输出 =============
key值为数字的key 从2 开始,因此无法打印出来
例 5- 遍历列表:
function TraversalTable(tb,func)
print("========== TraversalTable 输出 =============")
for key,value in func(arr) do
print("key:",key,"value:",value)
end
end
arr = {['a']=2,['b']=1,[1]=2,[2]=3}
TraversalTable(arr,pairs)
TraversalTable(arr,ipairs)
========== TraversalTable 输出 =============
key: a value: 2
key: 2 value: 3
key: 1 value: 2
key: b value: 1
========== TraversalTable 输出 =============
key: 1 value: 2
key: 2 value: 3
因此: 在遍历数组时使用 pairs 或者 ipairs 都可以。遍历table时使用 pairs 最好,除非有其他需求