- 0X25 表嵌套
- 0X2B 循环for
- 在编程中经常遇到需要对表中的所有成员都进行处理的情况.这称为表的遍历.
- 为了方便,我们先讨论顺序列表.它们中的索引都是正整数,而且连续.
- 所谓的"连续"是指不会出现前两个索引对应值为非nil值,中间两个索引对应值为nil,后边又有索引对应的值为nil.
- 事实上,如果一个表不连续,或者有非正整数的索引不会影响ipairs,长度运算#等的表现.只是不会把不连续的部分(第一个为nil值的正整数索引以后的部分)或者非正整数索引的部分算进去而已.例如以下代码显示2.
list={23,322,oeu=233} list[29]=67 print(#list)
- 遍历顺序列表可以通过之前学过的循环语句完成.循环次数等于表长.循环变量的初始值是1.并且在每次的循环中,循环变量的值作为索引.逐一回顾(或者拓展)一下我们所要用到的知识点(假设已有
list={23,82,12}
):- 取长度运算#可以作用于字符串或者顺序列表.用于返回其长度.例如
#list
.- 除了使用运算符#,也可以使用函数rawlen来获取字符串或者表的长度.``
- 可以用变量的值作为列表的索引.例如
i=2 list[i]
- 取长度运算#可以作用于字符串或者顺序列表.用于返回其长度.例如
- 例如输出一个顺序表中的所有连续的索引和内容:
list={23,12,343,432} list[5]=2322 for i=1,#list do print(i,list[i]) end
- for语句的另一种写法可以更加简洁地实现遍历表的功能.关于这种写法我先给出用法.其原理想要阐述清楚可能需要花费不少篇幅.所以放到以后介绍.
- 我们在介绍for的另一种写法之前.先来介绍所谓的迭代器.所谓的迭代器实际是一个或者一组函数(在Lua中是一个函数,一个表和一个值).
- 目前来说迭代器的作用就是用在for循环里,用于遍历表.
- Lua中的一些库函数会返回迭代器.例如pairs,ipairs,utf8.codes.
- ipairs函数接受一个顺序列表作为参数,返回一个迭代器.配合for语句可以遍历顺序列表中所有成员.
- 给出一个for遍历的例句:
for k,v in ipairs(list) do print(k,v) end
- 关于8中的例程.
- ipairs(list)这里返回一个表list的迭代器.可以先不用关心它究竟是什么.先当作一种特定写法.
- k是索引,v是索引对应的值.它们相当于之前写法中的循环变量i和用i当索引在list表中得到的结果list[i].
- k和v也可以叫别的名字.它们是for语句创建的两个局部变量.不论叫什么,第一个都会被赋予索引,第二个变量都会被赋予对应的值.
- pairs函数的效果和ipairs相似.不同的是,它会把表中所有值不为nil的键值对都遍历到.包括不连续的正整数索引和非正整数索引.实验:
list={12,'2332',3432,abc=oeu,cc=oe} list[78]='hello' for i,v in ipairs(list) do print(i,v) end for i,v in pairs(list) do print(i,v) end
- 0X2D 对表操作
- 0X33 迭代器