table属性

table库是有一些辅助函数构成的,这些函数将table作为数组来操作。

当中。有对列表中插入和删除元素的函数,有对数组元素进行排序的函数。还有对链接一个数组中全部字符串的函数。

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

    也就是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的最后一个元素。

使用这两个函数,非常easy实现栈、队列和双端队列。

我们能够初始化结构为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)

  • 4.table.concat()函数concat是concatenate(连锁, 连接)的缩写. table.concat()函数列出參数中指定table的数组部分从start位置到end位置的全部元素, 元素间以指定的分隔符(sep)隔开。

    除了table外,
    其它的參数都不是必须的, 分隔符的默认值是空字符, start的默认值是1, end的默认值是数组部分的总长.

local myTable = {19,"iron",10,"clay",}
local result = table.concat(myTable)
print(result) --> 19iron10clay result = table.concat(myTable, " space ")
print(result) --> 19 space iron space 10 space clay result = table.concat(myTable, " - ", 2)
print(result) --> iron - 10 - clay result = table.concat(myTable, " - ", 2, 3)
print(result) --> iron - 10

table长度大小总结

--table.getn()与#table是一样的
--(a)有序table
local t1 = {1,2,3}
print(table.getn(t1),"--",#t1,table.maxn(t1))--3 -- 3 3 --(b)无序table
local t2 = {"d",a=2,3}
print(table.getn(t2),"--",#t2,table.maxn(t2))--2 -- 2 2
--首先。要明确,这个t2不是一个简单的table,它混合了列表(list)和记录(record)两种风格。表中,a = 2是record风格。其次,要明确,record风格的record是不作为外表的长度计算。你能够把它想象成一个函数,跟其它面向对象语言一样。函数是不记为内部变量的。既然像函数一样,那就能够输出a的值,是的。print(t2.a)就能够了。
local t3 = {1,{a=2},3}
print(table.getn(t3),"--",#t3)--3 -- 3
--表嵌套表。嵌套表也是元素。print(t3[2].a)输出2 local t4 = {1,nil}
print(table.getn(t4),"--",#t4)--1 -- 1
--table获取长度的时候。会遍历一下整个表,在最后一个非nil处。就会返回。
local t5 = {1,nil,3}
print(table.getn(t5),"--",#t5)--3 -- 3
--继续往下写是没有全然有规律的 --无序table
local table2 = {["bb"] = 1,["cc"] = 2,["dd"] = 3,["ee"] = nil,["ff"] = 4,}
print("-----------",#table2) ------------- 0
--能够这么理解:把它想象成一个函数,跟其它面向对象语言一样,函数是不记为内部变量的。 既然像函数一样,那就能够输出a的值,是的。print(t2.a)就能够了。 --计算无序table的大小,能够这样
local count = 0
for k,v in pairs(table2) do
count = count + 1
end
print("-----------",count) ------------- 4

Lua整理——table库的更多相关文章

  1. Lua 之table库

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

  2. lua的table库中经常使用的函数

    lua提供了一些辅助函数来操作table. 比如,从list中insert和remove元素,对array的元素进行sort.或者concatenate数组中的全部strings.以下就具体地解说这些 ...

  3. lua的table库

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

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

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

  5. 生成lua的静态库.动态库.lua.exe和luac.exe

    前些日子准备学习下关于lua coroutine更为强大的功能,然而发现根据lua 5.1.4版本来运行一段代码的话也会导致 "lua: attempt to yield across me ...

  6. Chapter 20_1 table库

    table库是由一些辅助函数构成,把table作为数组来操作,所有的函数都忽略传入参数的那张表中的非数字键. 无论如何,若一个操作需要取表的长度,这个表必须是一个真序列,或是拥有__len元方法. 提 ...

  7. Lua 设置table为只读属性

    项目中部分只读表易被人误改写,故决定在非线上环境里对这些表附加只读属性,方便在出现误改写的时候抛出lua错误,最终版代码如下: --[[-------------------------------- ...

  8. Linux下C/C++和lua交互-Table

    本来这些文章都是在我的个人网站www.zhangyi.studio,目前处在备案状态,暂时访问不了,所以搬到这边.  最近这两天需要弄清楚C++和lua间相互调用和数据传递,废话不多说,直接上过程. ...

  9. c++获取lua嵌套table某属性的值

    开发环境:vs2012 lua版本:LuaJIT-2.0.2 lua文件作为配置文件,c++读取这个配置. lua配置结构如下 SceneConfig = { [] = { name =}, [] = ...

随机推荐

  1. serialport控件的详细用法

    http://www.cnblogs.com/jerry-bian/archive/2012/01/10/2317861.html 最近在做通讯协议,关于SerialPort类 DataReceive ...

  2. 算法笔记_127:蓝桥杯2017模拟赛-本科组习题解答(Java)

     目录 1 算年龄 2 猜算式 3 排列序数 4 字符串比较 5 还款计算 6 滑动解锁 7 风险度量   PS:以下代码部分仅供参考,若有不当之处,还请路过同学指出哦~ 1 算年龄 标题:算年龄 英 ...

  3. exception javax.crypto.BadPaddingException: Given final block not properly padded

      exception javax.crypto.BadPaddingException: Given final block not properly padded CreationTime--20 ...

  4. 【Spark】RDD操作具体解释3——键值型Transformation算子

    Transformation处理的数据为Key-Value形式的算子大致能够分为:输入分区与输出分区一对一.聚集.连接操作. 输入分区与输出分区一对一 mapValues mapValues:针对(K ...

  5. 使用spring的@Async异步执行方法

    应用场景: 1.某些耗时较长的而用户不需要等待该方法的处理结果 2.某些耗时较长的方法,后面的程序不需要用到这个方法的处理结果时 在spring的配置文件中加入对异步执行的支持 <beans x ...

  6. python之函数用法iter()

    # -*- coding: utf-8 -*- #python 27 #xiaodeng #python之函数用法iter() #iter() #说明:对一个对象调用 iter() 就可以得到它的迭代 ...

  7. Exception in thread main java.lang.NoClassDefFoundError: org/apache/juli/logging/LogFacto

    报错: Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/juli/logging/Log ...

  8. oracle中number对应java数据类型

    本文转自:http://blog.csdn.net/ludongshun2016/article/details/71453125 数据库中为number类型的字段,在Java类型中对应的有Integ ...

  9. 60款与DevOps相关的开源工具

    原文地址:https://elasticbox.com/blog/de ... ools/ 你喜欢免费的东西吗?获得开发者社区支持的自动化,开源的工具是大家梦寐以求的.这里列举了 60+ 款最棒的开源 ...

  10. 转 python 读取中文文件名/中文路径

    python直接读取中文路径的文件时失败,可做如下处理: inpath = 'D:/work/yuanxx/在线导航/驾车导航/walk_log/20130619_172355.txt' uipath ...