lua pairs 与 ipairs

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 最好,除非有其他需求
posted @ 2017-08-23 17:25  熊二  阅读(647)  评论(0编辑  收藏  举报