Lua中table的一些辅助函数介绍

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

0.table.getn()Lua 中我们经常假定 array 在最后一个非 nil 元素处结束。

这个传统的约定有一个弊端:我们的 array中不能拥有 nil 元素。对大部分应用来说这个限制不是什么问题,比如当所有的 array 有固定的类型的时候。但有些时候我们的 array 需要拥有 nil 元素,这种情况下,我们需要一种方法来明确的表明 array的大小.

1.tabel.insert()用于将一个元素插入到一个数组的指定位置,它会移动后续的元素以空出空间,且是数组的长度增加1.

eg:如果a是一个数组{10,20,30},调用table.insert(a,1,15)后,a变为{15,10,20,30}。经常使用的一个特殊情况是,我们不带位置参数调用insert,将会在array最后位置插入元素(所以不需要元素移动)。

2.table.remove()函数删除数组中指定位置的元素,并返回这个元素,所有后面的元素前移,并且数组的大小改变。不带位置参数调用的时候,他删除array的最后一个元素。

使用这两个函数,很容易实现栈、队列和双端队列。我们可以初始化结构为a={}。一个push操作等价于table.insert(a,x);一个pop操作等价于table.remove(a)。要在结构的另一端结尾插入元素我们使用table.insert(a,1,x);删除元素用table.remove(a,1)。最后两个操作不是特别有效的,因为他们必须来回移动元素。然而,因为table库这些函数使用C实现,对于小的数组(几百个元素)来说效率都不会有什么问题。

3.table.sort()他有两个参数:存放元素的数组和排序函数。

排序函数有两个参数并且如果在array中排序后第一个参数在第二个参数前面,排序函数必须返回true。如果未提供排序函数,sort使用默认的小于操作符进行比较。默认是升序。

一个常见的错误是企图对表的下标域进行排序。在一个表中,所有下标组成一个集合,但是无序的。如果你想对他们排序,必须将他们复制到一个array然后对这个array排序。

对于Lua来说,数组也是无序的。但是我们知道怎样去计数,因此只要我们使用排序好的下标访问数组就可以得到排好序的函数名。这就是为什么我们一直使用ipairs而不是pairs遍历数组的原因。前者使用key的顺序1、2、……(ipairs),后者表的自然存储顺序(pairs)。

(0)

相关推荐

  • Lua中的table浅析

    Lua的table提供了Map的功能,实现了"关联数组",并且整数.字符串甚至nil都可以作为索引/key:table没有固定的大小.   基于table,可以表示普通数组.符号表.集合.记录.队列和其他数据结构.   而Lua也是通过table来解决模块(module).包(package)和对象(Object)的. 例如io.read表示使用"read"来索引table io.   在Lua中,table既不是值也不是"变量",而是对象,可以

  • Lua中table的几种构造方式详解

    之前对于Lua的研究都是纸上谈兵,没有真正的项目练手,现在公司的项目基本上都是用Lua开发,是时候补充一下我那蹩脚的Lua知识了. 基础数据类型.表达式.循环结构什么的我就不说了,这么简单的东西说了也要被大家喷. 今天我想说说table的几种构造方式. 0.Lua调试工具--LuaEditor 首先,如果你是第一次接触Lua,请补充一下Lua的最基本之中的基础语法(小若:O O!),然后下载一个LuaEditor工具,用来查看Lua执行效果,当然也可以调试,本篇内容不解释这个工具.可以百度一下这

  • Lua中的元表(metatable)、元方法(metamethod)详解

    终于到了在实际中经常要用到的内容了--元表与元方法. 在第一次看见这两样东西的时候,可能会觉得它很深奥,但其实很好理解,虽然实际上它可能真的很深奥.(小若:停!滚粗.) 1.知道为什么1 + 1 = 2吗? 为什么在Lua中,1+1会等于2呢?(小若:难道除了Lua,其他地方就不等于2了?) 为什么数字和数字相加是合法的,为什么table和table相加就会报错?大家有想过这些问题吗?   没错,规则,这一切都只是规则而已,Lua规定了数字之间可以进行加减乘除,而table之间则不可以. 这是因

  • Lua中table的一些辅助函数介绍

    table库是有一些辅助函数构成的,这些函数将table作为数组来操作.其中,有对列表中插入和删除元素的函数,有对数组元素进行排序的函数,还有对链接一个数组中所有字符串的函数. 0.table.getn()Lua 中我们经常假定 array 在最后一个非 nil 元素处结束. 这个传统的约定有一个弊端:我们的 array中不能拥有 nil 元素.对大部分应用来说这个限制不是什么问题,比如当所有的 array 有固定的类型的时候.但有些时候我们的 array 需要拥有 nil 元素,这种情况下,我

  • Lua中table的遍历详解

    当我在工作中使用lua进行开发时,发现在lua中有4种方式遍历一个table,当然,从本质上来说其实都一样,只是形式不同,这四种方式分别是: 复制代码 代码如下: for key, value in pairs(tbtest) do      XXX  end   for key, value in ipairs(tbtest) do      XXX  end   for i=1, #(tbtest) do      XXX  end   for i=1, table.maxn(tbtest)

  • Lua中的基本数据类型详细介绍

    基础介绍 Lua是一种动态类型的语言.在语言中没有类型定义的语法,每个值都带有其自身的类型信息.在Lua中有8中基本类型,分别是: 1.nil(空)类型 2.boolean(布尔)类型 3.number(数字)类型 4.string(字符串)类型 5.userdata(自定义类型) 6.function(函数)类型 7.thread(线程)类型 8.table(表)类型 以上是Lua中的8中基本类型,我们可以使用type函数,判断一个值得类型,type函数返回一个对应类型的字符串描述.例如: 复

  • Lua中table库函数方法介绍

    一部分的table函数只对其数组部分产生影响, 而另一部分则对整个table均产生影响. 下面会分开说明. table.concat(table, sep,  start, end) concat是concatenate(连锁, 连接)的缩写. table.concat()函数列出参数中指定table的数组部分从start位置到end位置的所有元素, 元素间以指定的分隔符(sep)隔开.除了table外, 其他的参数都不是必须的, 分隔符的默认值是空字符, start的默认值是1, end的默认

  • Lua中table里内嵌table的例子

    废话不多少,看代码: 复制代码 代码如下: local temp_insert_table_Data = {      x = "test3",        y = "test4",        z = "test5" ,  }    local temp_insert_table = {      x = 1,      y = 2,      z = 3,      {   a = -1, a1 = 1},      {   b = -2

  • Lua中的面向对象编程详解

    简单说说Lua中的面向对象 Lua中的table就是一种对象,看以下一段简单的代码: 复制代码 代码如下: local tb1 = {a = 1, b = 2} local tb2 = {a = 1, b = 2} local tb3 = tb1   if tb1 == tb2 then      print("tb1 == tb2") else      print("tb1 ~= tb2") end   tb3.a = 3 print(tb1.a) 上述代码会输

  • Lua的table库函数insert、remove、concat、sort详细介绍

    函数列表: table.insert(table,[ pos,] value) table.remove(table[, pos]) table.concat(table[, sep[, i[, j]]]) table.sort(table[, comp]) 1. insert 和 remove 只能用于数组元素的插入和移出, 进行插入和移出时,会将后面的元素对齐起来. 所以在 for 循环中进行 insert 和 remove 的时候要注意插入和移除时是否漏掉了某些项:   复制代码 代码如下

  • Lua中的table学习笔记

    table 在 Lua 里是一种重要的数据结构,它可以说是其他数据结构的基础,通常的数组.记录.线性表.队列.集合等数据结构都可以用 table 来表示,甚至连全局变量(_G).模块.元表(metatable)等这些重要的 Lua 元素都是 table 的结构.可以说,table  是一个强大而又神奇的东西. table 特性 在之前介绍 Lua 数据类型时,也说过了 table 的一些特性,简单列举如下(详情可查看之前的介绍): 1.table是一个"关联数组",数组的索引可以是数字

随机推荐