Lua table pair和ipair区别

官方描述:

ipairs (t)

Returns three values: an iterator function, the table t, and 0, so that the construction

for i,v in ipairs(t) do body end

will iterate over the pairs (1,t[1]), (2,t[2]), ···, up to the first integer key absent from the table.

pairs (t)

Returns three values: the next function, the table t, and nil, so that the construction

for k,v in pairs(t) do body end

will iterate over all key–value pairs of table t.

See function next for the caveats of modifying the table during its traversal.

这样就可以看出 ipairs以及pairs 的不同。pairs可以遍历表中所有的key,并且除了迭代器本身以及遍历表本身还可以返回nil;但是ipairs则不能返回nil,只能返回数字0,如果遇到nil则退出。它只能遍历到表中出现的第一个不是整数的key。

  1. local tabFiles = {
  2. [3] = "test2",
  3. [6] = "test3",
  4. [4] = "test1"
  5. }
  6. for k, v in ipairs(tabFiles) do
  7. print(k, v)
  8. end

猜测它的输出结果是什么呢?根据刚才的分析,它在 ipairs(tabFiles) 遍历中,当key=1时候value就是nil,所以直接跳出循环不输出任何值。

  1. >lua -e "io.stdout:setvbuf ‘no‘" "test.lua"
  2. >Exit code: 0

那么,如果是

  1. for k, v in pairs(tabFiles) do
  2. print(k, v)
  3. end

则会输出所有:

  1. >lua -e "io.stdout:setvbuf ‘no‘" "test.lua"
  2. 3 test2
  3. 6 test3
  4. 4 test1
  5. >Exit code: 0

现在改变一下表内容,

  1. local tabFiles = {
  2. [1] = "test1",
  3. [6] = "test2",
  4. [4] = "test3"
  5. }
  6. for k, v in ipairs(tabFiles) do
  7. print(k, v)
  8. end

现在的输出结果显而易见就是key=1时的value值test1。

更多:http://blog.csdn.net/tony7758/article/details/6334001

Lua table pair和ipair区别,布布扣,bubuko.com

时间: 2024-12-22 13:50:43

Lua table pair和ipair区别的相关文章

Lua 中pairs和ipairs 区别

lua 中pairs 和 ipairs区别 标准库提供了集中迭代器,包括迭代文件每行的(io.lines),迭代table元素的(pairs),迭代数组元素的(ipairs),迭代字符串中单词的 (string.gmatch)等等.LUA手册中对与pairs,ipairs解释如下: ipairs (t) Returns three values: an iterator function, the table t, and 0, so that the construction for i,v

div与table用作布局的区别

本文向大家描述一下DIV和Table页面布局的区别和联系,一般来说Table开发快,容易控制,浏览器兼容也好些,另一部分认为DIV好,是以后的发展趋势,主要原因请看下文详细介绍. DIV布局和Table页面布局的区别和联系 现在对于网页制作是选择传统的Table还是用新型的DIV,有分歧.一部分说还是用Table好,开发快,容易控制,浏览器兼容也好些;另一部分认为DIV好,以后的发展趋势,主要是如下原因: DIV+CSS布局比Table布局节省页面代码,代码结构也更清晰明了. DIV+CSS开发

lua table integer index 特性

table.maxn (table) Returns the largest positive numerical index of the given table, or zero if the table has no positive numerical indices. (To do its job this function does a linear traversal of the whole table.) 返回表中最大的正数值index. 说明: 1. 此接口不是统计表中元素的

Lua table 的长度问题

直入主题 我们要取lua table的长度时习惯这样 local tb = {1,2,3,4} print(#tb) 这时候,输出理所当然的是4,如果在程序中我们需要判断长度时使用这样的方法,再看一下 tb[1] = nil print(#tb) 输出还是4,似乎有点背离我们的意愿 我们想知道这个table里面是不是有4个值,但是有一个值被置空了,输出结果却没有及时告诉我们 发生这样问题的原因是,lua在初始化table的时候,会给这个table分配值存储的空间,代码里面tb初始化包含4个数字值

两种Data Table参数化设置的区别

首先介绍Data Table的语法: 1.DataTable.value(ParameterID, SheetID) 2.DataTable(ParameterID, SheetID) 以上2种方法的效果是一样的. 使用例子: WebEdit("关键字输入框").Set DataTable.Value("列名",“表名”) 然后比较Global Sheet和Local Sheet 1.Global Sheet:是一个全局变量,有几行数据,程序就要回放几次. 它受Da

树形打印lua table表

local print = print local tconcat = table.concat local tinsert = table.insert local srep = string.rep local type = type local pairs = pairs local tostring = tostring local next = next function print_lua_table (lua_table, indent) if not lua_table or t

(转) 关于lua table是否为空的判断

在项目的脚本lua中经常有这样的需求, 1.local a = {} 2.对a进行处理 3.对a是否为空表进行判断 关于对a是否为空表的判断,我发现有些代码如此做: if a == {} then 这样的结果就是a == {}永远返回false,是一个逻辑错误.因为这里比较的是table a和一个匿名table的内存地址. 也有些代码如此做: if table.maxn(a) == 0 then 这样做也不保险,除非table的key都是数字,而没有hash部分. 难道真的要遍历table发现有

Lua table转C++数组

为了方便,这里数组用vector表示. C++层代码如下: static int LuaTable2Vector(lua_State *luaState) { int count = luaL_getn(luaState, 1); std::vector<std::string> vecNameList; for (int i = 0; i < count; i++) { lua_rawgeti(luaState, 1, i+1); const char *strName = lua_t

C++ map.insert: pair和make_pair区别

1 C++ map.insert: pair和make_pair区别 2 \********************************* 3 map<uint32_t, string> temp; 4 1. temp[1] = "template"; 5 2.temp.insert(pair<uint32_t, string>(1, "template")); 6 3.temp.insert(make_pair(1, "tem