ipairs与pairs的区别

ipairs 和pairs在lua中都是遍历tbale的函数可是两者有差别

1.pairs遍历table中的全部的key-vale 而ipairs会依据key的数值从1開始加1递增遍历相应的table[i]值

如:table1 = { key1 = "val1", key2 = "val2", "val3" }

pairs 会优先输出没有键的值,即先输出"val3" ,再到key1 = "val1",再 key2 = "val2"。

ipairs 只会输出没有键的值。即只输出"val3",其他不会输出。

pairs能够遍历表中全部的key,而且除了迭代器本身以及遍历表本身还能够返回nil;可是ipairs则不能返回nil,仅仅能返回数字0,假设遇到nil则退出。它仅仅能遍历到表中出现的第一个不是整数的key

例程1:

a = {[1] = "a1", [2] = "a2", [3] = "a3", [5] = "a4", [6] = "a5",}

for key, value in ipairs(a) do

print(key, value)

end

结果:

1    a1

2    a2

3    a3

例程2:

a = {[1] = "a1", [2] = "a2", [3] = "a3", [5] = "a4", [6] = "a5",}

for key, value in pairs(a) do

print(key, value)

end

结果:

6    a5

2    a2

3    a3

1    a1

5    a4

例程3:

tab1 = { key1 = "val1", key2 = "val2", "val3" }

for k, v in pairs(tab1) do

print(k .. " - " .. v)

end

结果:

1 - val3

key1 - val1

key2 - val2

例程4

tab1 = { key1 = "val1", key2 = "val2", "val3" }

for k, v in ipairs(tab1) do

print(k .. " - " .. v)

end

结果:

1 - val3

---------------------

转载于:

https://blog.csdn.net/zwj695535100/article/details/83040127

原文地址:https://www.cnblogs.com/gd-luojialin/p/10962724.html

时间: 2024-09-29 05:59:58

ipairs与pairs的区别的相关文章

Lua中ipairs和pairs的区别详解

迭代器for遍历table时,ipairs和pairs的区别: 区别一:ipairs遇到nil会停止,pairs会输出nil值然后继续下去 区别二: local a = {"Hello", "World", a = 1, b = 2, x = 10, y = 20, "Good", nil, "Bye"} -- for i,v in ipairs(a) do -- print(v) -- end for k,v in pair

Lua:ipairs和pairs的区别

ipairs 和pairs在lua中都是遍历tbale的函数但是两者有区别 1.pairs遍历table中的所有的key-vale 而ipairs会根据key的数值从1开始加1递增遍历对应的table[i]值 a = {[1] = "a1", [2] = "a2", [3] = "a3", [5] = "a4", [6] = "a5",} for key, value in ipairs(a) do pri

Lua中,泛型for循环遍历table时,ipairs和pairs的区别

为了看出两者的区别,首先定义一个table: a={"Hello","World";a=1,b=2,z=3,x=10,y=20;"Good","Bye"} 使用ipairs对其进行遍历: for i, v in ipairs(a) do print(v) end 输出的结果是: HelloWorldGoodBye 可见ipairs并不会输出table中存储的键值对,会跳过键值对,然后按顺序输出table中的值. 再使用pair

lua中ipairs与pairs区别与注意

lua中基础类   lbaselib.c 这里面定义的基础函数,函数指针数组; static const luaL_Reg base_funcs[] = { {"assert", luaB_assert}, {"collectgarbage", luaB_collectgarbage}, {"dofile", luaB_dofile}, {"error", luaB_error}, {"getmetatable&qu

lua中ipairs和pairs

两个都是可以进行迭代遍历 for i, v in ipairs( a ) do print( i, v ) end for i, v in pairs( a ) do print( i, v )end 两者通过上述遍历,都会从下标为1开始遍历,区别: ipairs遍历的时候如果遇到nil就会终止遍历,如果没有nil则遍历到尾部终止. pairs会遍历全部元素,遇到nil也不会终止,而且会遍历到-1,0等下标的元素 如下代码: function test1( a ) for i, v in ipa

Lua语言基础汇总(6)-- 迭代器与泛型for

前言 迭代器就是一种可以遍历一种集合中所有元素的机制,在Lua中,通常将迭代器表示为函数.每调用一次函数,就返回集合中的“下一个”元素.每个迭代器都需要在每次成功调用之后保存一些状态,这样才能知道它所在的位置及如何走到下一个位置,通过之前博文的总结,闭包对于这样的任务提供了极佳的支持.现在我们就用代码来实现一个简单的迭代器. 1 2 3 4 5 6 7 8 9 10 11 12 function values(tb)      local i = 0      return function (

CC3.2+Lua(2) ——Lua基础语法1

[唠叨] 首先,我已经默认你已经学过至少一门宿主语言了(C++.Java等),然后转向学习Lua. 因为51cto中对于Lua语言没有代码高亮,为了让代码看起来丰富多彩,我只好用截图了. 本节内容仅介绍Lua的简单基础语法,更多用法请百度:Lua中文教程 . Lua参考手册 . [学习感慨]     > 语句末尾不需要加分号 ;      > 语句块不是用花括号 { } , 而是 do 语句块 end 表示语句块的开始和结束.         而 花括号 {} 表示的为一个 表结构 .    

[转]Lua语言基础汇总(6)-- 迭代器与泛型for

前言 迭代器就是一种可以遍历一种集合中所有元素的机制,在Lua中,通常将迭代器表示为函数.每调用一次函数,就返回集合中的“下一个”元素.每个迭代器都需要在每次成功调用之后保存一些状态,这样才能知道它所在的位置及如何走到下一个位置,通过之前博文的总结,闭包对于这样的任务提供了极佳的支持.现在我们就用代码来实现一个简单的迭代器. 1 2 3 4 5 6 7 8 9 10 11 12 function values(tb)      local i = 0      return function (

Lua 多维表的遍历中的赋值

说到Lua的遍历将要使用到循环:先说遍历再说循环: 遇到这样类似结构的一个table Data={ [102]={p1=1,pa={1,2,3}}, [103]={p1=2,pa={2,3,4}}, [105]={p1=4,pa={3,4,5}} } 目的获得key 值与pa的一个表,实现下 1 -- 使用table.insert方法插入到新表中 2 for k,v in pairs(Data) do 3 print(k,v) 4 Data2[k]={}; 5 table.insert(Data