`
xenyinzen
  • 浏览: 3052 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
最近访客 更多访客>>
社区版块
存档分类
最新评论

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索引开始的地方


分享到:
评论

相关推荐

    SMS短信接口API-[轻量级通用短信通知模块]

    $config['SEND_SMS_API'] //发送url中需要填入的apikey信息 2.SMSNotify/list.php,此文件是记录所有被促发的已发送短信及其状态, 供管理员查看,可以不要,如果要放置网站上,建议改名。 设置完成后,请在...

    精通WindowsAPI 函数 接口 编程实例

    6.4.1 PS API与Tool help API 176 6.4.2 遍历系统中的进程 178 6.4.3 列举进程的模块、线程 182 6.4.4 进程的堆使用、内存占用、虚拟内存大小,页面错误情况 184 6.5 动态链接库 185 6.5.1 加载、释放DLL...

    python模块

    * copy: copy模块提供了对复合(compound)对象(list,tuple,dict,custom class)进行浅拷贝和深拷贝的功能。 * pickle: pickle模块被用来序列化python的对象到bytes流,从而适合存储到文件,网络传输,或...

    精通Windows.API-函数、接口、编程实例.pdf

    6.4.1 PS API与Tool help API 176 6.4.2 遍历系统中的进程 178 6.4.3 列举进程的模块、线程 182 6.4.4 进程的堆使用、内存占用、虚拟内存大小,页面错误情况 184 6.5 动态链接库 185 6.5.1 加载、释放DLL...

    Combox控件Api操作模块,Combox快速搜索某行是否包含字符串-vb6源码

    Combox控件Api操作模块正在设计中(常数写好了,大家可以自行扩展) 用了微秒级的CPU计时器API:QueryPerformanceCounter,大家可以对自已的函数进行高精度运行计时,提高函数运行效率,优化到更好. 高精度计时 win32...

    react-infinite-scroll-list:使用IntersectionObserver API管理无限列表

    注意:该库基于 API,尚未得到广泛支持。 检查并根据需要添加 ! 在上查看示例 用法 将模块导入您的应用程序: // From ES6 import InfiniteList from 'react-infinite-scroll-list' ; // From CJS const ...

    radio-browser:无线浏览器API的Nodejs模块

    RadioBrowser API客户端Nodejs模块安装npm install radio-browser用法每个方法都返回一个Promise,因此您必须使用then并catch或async并await 。 const RadioBrowser = require ( 'radio-browser' )let filter = { ...

    phalcon_multi_module_framework:phalcon多模块框架

    重写封装了部分服务封装了验证器在基础控制器中封装了获取get、post、json参数并自动过滤数据对原转发(forward)做了封装集成了smarty模板引擎添加模块很容易例如还需要增加一个api模块打开config/define.php,把...

    line-api-cli-nodejs:适用于Node.js的LINE平台CLI

    该模块将帮助您通过CLI轻松使用LINE API。 简短的摘要 LINE API CLI可以帮助您更快地处理与LINE-API相关的项目,因为您不需要在Web浏览器和IDE之间进行切换(在首次设置后:P)。 如果您已经是使用cURL与LINE API...

    pymangal:用于Mangal API的Python模块

    pymangal是一个与mangal API交互的python模块。 该文档位于: : 所有编号版本都推送到PyPI,因此您可以随时使用pip install pymangal进行pip install pymangal 。 待办事项清单 顺序不分先后 networkx导出 自动...

    synnefo-nodejs-api:synnefo-nodejs-api 是一个模块,允许您使用 node.js 与 Synnefo API 进行通信

    synnefo-nodejs-api 是一个模块,允许您使用 node.js 与进行通信 Synnefo 是一个用 Python 编写的完整开源云堆栈,提供计算、网络、图像、卷和存储服务。 安装 待定 用法 待定 方法 所有方法都遵循。 可以使用从源...

    ns-api:用 Node.js 编写的 NS API 模块

    用 Node.js 编写的 NS API 模块 如何使用 var NS = require('./src/ns'); NS.Auth('API Username', 'API Password'); NS.getStations(function(stations) { return stations; // List of stations }); 文档 文档...

    React-Api-Shopping-List

    在模块系统之外添加资产 何时使用public文件夹 使用全局变量 添加引导程序使用自定义主题 增加流量 添加路由器 添加自定义环境变量 在HTML中引用环境变量 在Shell中添加临时环境变量 在.env添加开发环境变量 我可以...

    python-restful-pingdom:Pingdom RESTful API的Python模块

    Pingdom REST API的Python模块 描述 简单Python包装器。 该模块不支持即将淘汰的 。 有关SOAP接口的信息,请参见 。 依存关系 除了Python标准库,没有其他功能。 用法 实例化: import pingdom p = pingdom....

    proconsp-api-consumer::package:PROCONSP API的node.js使用者

    proconsp-api-consumer Node.js模块,可在PROCON SP SP中进行投诉查询 要安装此模块 $ npm i proconsp-api-consumer 如何获取API的令牌 按照网站上的说明获取令牌 如何预约 设置procon api令牌: const { ...

    AspBox-v1.3.2工具API

    List处理各种List对象 Mail邮件处理块 PY拼音转换模块 Rnd随机数函数块 Session操作类 Sc脚本执行操作模块 Time时间操作块 Tpl模板类 Up,Upload上传处理块 Url处理块 X扩展块 Xml处理XML块 以及其他一些调用方法如as

Global site tag (gtag.js) - Google Analytics