- 直接用[]来生成list对象,在代码中显得很清楚;
- 有大量方便好用的函数能操作在list对象上,非常方便;
因此,我们希望在lua中,加入对list对象类型的支持。这个目标,在lglib中实现。
全局对象List
lglib中,定义了一个全局对象List,它就是所有list实例的原型。使用require 'lglib'后,这个对象可以直接使用。此对象又继承自lua的原生table结构。
生成一个新的list
local lista = List() local listb = List {1,2,3,4,5,6}
判断一个对象是否是一个list
isList(t)
产生一个序列list
List.range(start, finish) start: 序列的起始值 finish: 序列的结束值 示例: local a = List.range(1, 5) --> {1,2,3,4,5} local a = List.range(5) --> {1,2,3,4,5} local a = List.range(5, 10) --> {5,6,7,8,9,10}
当使用全局对象List创建了list实例后,这些实例可以使用下面的api
添加元素
list_obj:append(elem) 将新元素elem添加到列表末尾 list_obj:prepend(elem) 将新元素elem添加到列表头部 list_obj:push(elem) 将新元素elem添加到列表末尾 list_obj:insert([pos,] elem) 将新元素插入到列表的某一个位置
删除元素
list_obj:pop() 弹出列表最后一个元素,并返回此元素(此函数不是返回list_obj对象本身) list_obj:iremove(i) 按下标索引删除第i个元素,返回list_obj对象本身 list_obj:remove(elem) 按值删除元素elem,返回list_obj对象本身
扩展list
list_obj:extends(another) 把list another与list list_obj拼接起来,仍然由list_obj进行索引 another: 另外一个list 示例: local a = List {1,2,3} --> a = {1,2,3} local b = List {4,5,6} --> b = {4,5,6} a:extends(b) --> a = {1,2,3,4,5,6}
注:此合并运算也可以由 a = a + b 的形式来完成。
查找
list_obj:find(val[, idx]) 在list_obj中从第idx个索引起开始查找值为val的元素,返回此元素的索引 示例: local a = List {1,2,3,7,8,9} --> a = {1,2,3,7,8,9} a:find(7) --> 4
包含
list_obj:contains(elem) 判断元素是否在list_obj中,返回true或false
计算同值元素出现次数
list_obj:count(elem) 计算元素elem在list_obj中出现的次数
转成字符串
list_obj:join(sep) 将列表的各元素以sep为间隔符合并成一个字符串,返回合并后的字符串
排序
list_obj:sort(cmp) 将本列表按传入的比较函数cmp进行排序,返回自身
翻转
list_obj:reverse() 将本列表的各元素的顺序前后翻转,返回自身
切片
list_obj:slice(start, stop, is_rev) 将本列表的各元素的顺序前后翻转,返回自身
清空
list_obj:clear() 将本列表清空(暂时不知道什么场合下会用到它)
求长度
list_obj:len() 求本列表长度
删除一个区间
list_obj:chop(i1,i2) 删除本列表中索引从i1开始到i2结束的一段,返回自身
将一个列表插入到本表中来
list_obj:splice(idx, list) 将列表list中的所有元素依次插入到本列表从idx索引开始的地方