List模块API

由于lua中没有原生的list对象类型,而只有(无所不能的)table。习惯了python编程的人很可能会觉得不适应。平心而论,Python在这一点上的设计确实更傻瓜化更清晰一点,好用之处体现在两点:

  • 直接用[]来生成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索引开始的地方


猜你喜欢

转载自xenyinzen.iteye.com/blog/1067021