lua提供了一些辅助函数来操作table。

比如,从list中insert和remove元素,对array的元素进行sort。或者concatenate数组中的全部strings。以下就具体地解说这些方法。


insert and remove
table.insert将一个元素插入到指定位置。比如:

t = {1, 2, 3}
table.insert(t, 1, 4}
t的结果将是{4, 1, 2, 3}
insert的第二个參数是能够省略的。这样就会插入到数组的最后,从而不必移动其它元素。相同地。table.remove是从数组中移除(并返回)一个元素,table.remove(t,1)将移除t中下标是1的元素,假设不指定移除位置,则移除最后一个。

通过insert,remove方法,就能非常直接的地实现stacks。queues, double queues. push操作就相当于table.insert(t, x), 而pop操作就相当于table.remove(t)。比如定义一个栈:

stack = {}
function stack:push(x)
     table.insert(self, x)
end

function stack:pop()
     table.remove(self)
end

sort
还有一个实用的函数是sort,对数组进行排序,假设没有提供排序函数,默认是<操作。

人们范的普遍的错误是尝试对table的key进行排序。

在table里,全部key组成个集合,绝壁没有不论什么顺序。

假设你要对他们排序。首先要将他们复制到一个数组里。然后在进行sort。假如我们有一个table,想要以排序后的key的顺序进行迭代,我们就能够写过这种迭代器:

function pairsByKeys(t, f)
     local a = {}
     for k in pairs(t) do a[#a+1] = k end
     table.sort(a, f)
     local i = 0
     return function()
          i = i + 1
          return a[i], t[a[i]]
     end
end

concatenation
给定的table,全部的元素是string或是number,将返回table[i]..sep..table[i+1] ··· sep..table[j],分隔符默认是空字符串。i默认是1, j默认是表的长度。假设i > j, 则返回空字符串。比如:

spring = {"春林渐盛", "春水初生", "春风十里不如你"}

print(table.concat(spring, ","))

(完)

lua的table库中经常使用的函数的更多相关文章

  1. lua的table库中的常用函数总结

    table是Lua语言中的一种重要的数据类型, table 的一些特性简单列举如下: (1).table 是一个“关联数组”,数组的索引可以是数字或者是字符串; (2).table 的默认初始索引一般 ...

  2. numpy函数库中一些经常使用函数的记录

    ##numpy函数库中一些经常使用函数的记录 近期才開始接触python,python中为我们提供了大量的库,不太熟悉.因此在<机器学习实战>的学习中,对遇到的一些函数的使用方法进行记录. ...

  3. Lua 之table库

    标准table库 table.concat(table, sep,  start, end) concat是concatenate(连锁, 连接)的缩写,table.concat()函数列出参数中指定 ...

  4. Lua整理——table库

    table属性 table库是有一些辅助函数构成的,这些函数将table作为数组来操作. 当中.有对列表中插入和删除元素的函数,有对数组元素进行排序的函数.还有对链接一个数组中全部字符串的函数. 0. ...

  5. c++函数库中一些实用的函数

    有一些程序,虽然写起来不难,但是可能比较麻烦或容易出错,这时就可以用c++函数库里自带的一些实用的函数. 这里只记录一些不太常见的函数. ------------------------------- ...

  6. 使用Python PIL库中的Image.thumbnail函数裁剪图片

    今天,是我来到博客园的第五天,发现自己还没有头像,想着上传ubuntu系统中我很喜欢的一个背景图片来当头像,但是因为图片过大,上传失败了.那么,我们如何使用python中强大的PIL库来进行图片裁剪呢 ...

  7. lua的table库

    函数列表: table.insert(table,[ pos,] value) table.remove(table[, pos]) table.concat(table[, sep[, i[, j] ...

  8. c++标准库中的string常用函数总结《转》

    标准C++中的string类的用法总结 相信使用过MFC编程的朋友对CString这个类的印象应该非常深刻吧?的确,MFC中的CString类使用起来真的非常的方便好用.但是如果离开了MFC框架,还有 ...

  9. R语言学习笔记(十七):data.table包中melt与dcast函数的使用

    melt函数可以将宽数据转化为长数据 dcast函数可以将长数据转化为宽数据 > DT = fread("melt_default.csv") > DT family_ ...

随机推荐

  1. PCB设计资料:看到最后才知道是福利

    參考资料 通过以下的关键词直接从网络上Google或Baidu就能非常easy的找到以下的资料,这里仅仅是以參考文献的方式做一个整理以及简单的说明. 刘雅芳,张俊辉. 抗干扰角度分析六层板的布线技巧. ...

  2. Activity 和 Intent

    Activity 和 Intent 一.Intent指向Activity 二.利用 Intent 向第二个 Activity 传数据 三.利用 Intent 接受第二个 Activity 的返回值 四 ...

  3. forEach嵌套循环的问题

    程序中: List firstList = ; i<firstList.size(); i++) { List secondListList = request.setAttribute(&qu ...

  4. 【从零开始,从内核驱动驱动到用户空间调用】编写第一个linux驱动,通过端口访问I/O寄存器。

    目的: 通过I/O端口方式访问RTC的秒寄存器: 由于本人从来没看过linux方面的书籍,也只是会在终端用些常用的命令而已,这次老大叫我学着通过I/O端口方式直接去读写寄存器.于是我在google中搜 ...

  5. 基于visual Studio2013解决面试题之1007鸡蛋和篮子

     题目

  6. Codeforces Round #199 (Div. 2) B. Xenia and Spies

    B. Xenia and Spies time limit per test 2 seconds memory limit per test 256 megabytes input standard ...

  7. cocos2d-x 制作资源下载页面

    开发游戏中用到从http 服务器下载文件的操作,所以要有个界面显示下载进度,同时联网采用curl库,因为下载是同步的操作,所以用了多线程 啥也不说,直接贴代码.我是采用ccbi做的页面,你也可以做一个 ...

  8. 如何安装(装载)axure组件(部件)

    我们在网络上经常可以下载到很多网友精心设计的axure组件,这些组件给我们节省了很多的时间,方便了我们进行原型设计,可是对于很多刚刚接触axure的朋友就遇到了2个问题: 第一:到哪里去下载这些组件 ...

  9. 软考之路(四)---软件project一 概念模型,逻辑模型,物理模型

    自从接触到数据库到如今这三个概念大家理解的还有些不清楚,今天来为大家解答疑惑,共同提高,结合生活理解 概念模型        概念模型就是在了解了用户的需求,用户的业务领域工作情况以后,经过分析和总结 ...

  10. MSSQL- select @@identity的用法

    转载自:http://blog.163.com/zhangqian_sms/blog/static/544483382008925112539620/ 用select @@identity得到上一次插 ...