lua中table的常用方法
转载:https://blog.csdn.net/Fenglele_Fans/article/details/83627021
1:table.sort()
language = {"lua","java","c#","c++"}
table.sort(language) --只有table一个参数,使用lua默认的排序方式排序
for i, v in ipairs(language) do
-- print(v) --输出c# c++ java lua
end
local function my_comp1(element1,element2) --自定义比较函数 作为table.sort()参数
return element1<element2
end
table.sort(language,my_comp1)
for i, v in ipairs(language) do
print(v) --输出 c# c++ java lua
end
local function my_comp2(element1,element2) --自定义比较函数 作为table.sort()参数
return element1>element2
end
table.sort(language,my_comp2)
for i, v in ipairs(language) do
-- print(v) --输出lua java c++ c#
end
local function my_comp3(element1,element2) --自定义比较函数 作为table.sort()参数
if element1==nil then
return false
end
if element2==nil then
return true
end
return element1>element2
end
language[2]=nil --table中有nil存在的情况
table.sort(language,my_comp3)
for i, v in ipairs(language) do
-- print(v) --输出lua c++ c#
end
2:table.insert()
tab2 = {"a",2,"b",5} --定义一个table
table.insert(tab2,2,"king") --指定在某一位置插入某值
for i, v in ipairs(tab2) do
-- print(v) --输出a king 2 b 5
end
table.insert(tab2,3) --没有指定位置的话,默认将值插入到末尾位置
for i, v in ipairs(tab2) do
-- print(v) --输出a king 2 b 5 3
end
tab3 = {"d",7,"e"}
table.insert(tab2,tab3) -- 将table插入table
for i, v in ipairs(tab2[7]) do
--print(v) --输出d 7 e
end
tab2["mm"]="mmm" --添加一个新的键值对 下面的for迭代器选择pairs才能将新的键值对遍历出来,而非ipairs
for i, v in pairs(tab2) do
print(i,v) --输出1 a ; 2 king ; 3 2 ; 4 b ; 5 5 ; 6 3 ; 7 table ;mm mmm
end
3:table.concat()
tab1 = {"a","b","c",5,"d"}
local aa = table.concat(tab1)
local bb = table.concat(tab1,"/")
local cc = table.concat(tab1,",",2,4)
print(aa) --输出abc5d
print(bb)--输出a/b/c/5/d
print(cc) --输出b,c,5
print(type(aa)) --输出string
print(type(bb)) --输出string
print(type(cc)) --输出string
--再来测试一下table.concat()的效率
local strings = {} --定义一个局部table
for i = 1, 100000 do
strings[i]="hahaha" --给这个table赋值
end
--local stringT = ""
--local startTime = os.clock() --os.clock()获取当前系统时间
--for i,v in ipairs(strings) do
-- stringT=stringT..v --使用for循环连接字符串
--end
--local endTime = os.clock()
--local usedTime = endTime-startTime
--print("for循环连接字符串消耗的时间:"..usedTime) --输出13.135
local startTime = os.clock()
table.concat(strings)
local endTime = os.clock()
local usedTime=endTime-startTime
print("使用table.concat()连接字符串所消耗的时间:"..usedTime) --输出0.01(快了不是一点半点)
4:table.remove()
tab4 = {1,4,"tt","jj"}
table.remove(tab4,1) --移除指定位置的table值,若没有指定位置,则默认移除最后一位的元素
for i, v in ipairs(tab4) do
print(v) --输出 4 tt jj
end
5:unpack()
tab5 = {"b","v","b","f","a"} print( unpack(tab5,1,3)) --输出b v b print(unpack(tab5)) --输出b v b f a
6.table.getn(studentList)获取字符串长度
lua中table的常用方法的更多相关文章
- lua中 table 元表中元方法的重构实现
转载请标明出处http://www.cnblogs.com/zblade/ lua作为游戏的热更新首选的脚本,其优势不再过多的赘述.今天,我主要写一下如何重写lua中的元方法,通过自己的重写来实现对l ...
- lua中 table 重构index/pairs元方法优化table内存占用
转载请标明出处http://www.cnblogs.com/zblade/ lua作为游戏的热更新首选的脚本,其优势不再过多的赘述.今天,我主要写一下如何重写lua中的元方法,通过自己的重写来实现对l ...
- lua中 table.getn(t) 、#t、 table.maxn(t) 这三个什么区别?
lua中 table.getn(t) .#t. table.maxn(t) 这三个什么区别? RTlocal t = {1,888,x= 999,b=2,5,nil,6,7,[10]=1,8,{z = ...
- Lua中table的实现-《Lua设计与实现》
本文来自<Lua设计与实现>的阅读笔记,推荐Lua学习者可以购买一本,深入浅出讲解lua的设计和实现原理,很赞,哈哈 Lua中对于表的设计,是基于数组和散列表,和其他语言不同,对于数组 ...
- lua中table的遍历,以及删除
Lua 内table遍历 在lua中有4种方式遍历一个table,当然,从本质上来说其实都一样,只是形式不同,这四种方式分别是: 1. ipairs for index, value in ipair ...
- lua中table如何安全移除元素
在Lua中,table如何安全的移除元素这点挺重要,因为如果不小心,会没有正确的移除,造成内存泄漏. 引子 比如有些朋友常常这么做,大家看有啥问题 将test表中的偶数移除掉local test = ...
- C++对Lua中table进行读取、修改和创建
C++代码: // LuaAndC.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream> #i ...
- Lua中Table的学习
--table 是 Lua 的一种数据结构,用来帮助我们创建不同的数据类型,如:数组.字典等 --Lua也是通过table来解决模块(module).包(package)和对象(Object)的. 例 ...
- lua中遍历table的几种方式比较
当我在工作中使用lua进行开发时,发现在lua中有4种方式遍历一个table,当然,从本质上来说其实都一样,只是形式不同,这四种方式分别是: for key, value in pairs(tbtes ...
随机推荐
- LRU算法的精简实现(基于Java)
LRU(Least recently used,最近最少使用)算法根据数据的历史访问记录来进行淘汰数据,其核心思想是"如果数据最近被访问过,那么将来被访问的几率也更高". impo ...
- Ubuntu14.04更换阿里云源
步骤很简单一共三步,如下所示: 第一.备份源文件(防止万一) sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak 第二.修改源文件(这里的源 ...
- 分别编写两个类Point2D,Point3D来表示二维空间和三维空间的点,使之满足下列要求:
(1) Point2D有两个整型成员变量x, y (分别为二维空间的X,Y方向坐标),Point2D的构造方法要实现对其成员变量x, y的初始化. (2)Point2D有一个void型成员方法offs ...
- PAT乙级1014
1014 福尔摩斯的约会 (20 分) 大侦探福尔摩斯接到一张奇怪的字条:我们约会吧! 3485djDkxh4hhGE 2984akDfkkkkggEdsb s&hgsfdk d& ...
- 轻量级IOC容器:Ninject
Ninject是一个快如闪电.超轻量级的基于.Net平台的依赖注入框架.它能够帮助你把应用程序分离成一个个松耦合.高内聚的模块,然后用一种灵活的方式组装起来.通过使用Ninject配套你的软件架构,那 ...
- Java 遍历指定文件夹及子文件夹下的文件
Java 遍历指定文件夹及子文件夹下的文件 /** * 遍历指定文件夹及子文件夹下的文件 * * @author testcs_dn * @date 2014年12月12日下午2:33:49 * @p ...
- python 中的字符串格式化
python 中的字符串格式化 %方式的调用 1.格式化代码 代码 意义 s 字符串,使用str r 字符串,使用repr不使用str c 字符 d 十进制的数字 i 整数 u 无符号整数 o 八进制 ...
- Scala_运算符
Scala运算符与操作数的位置关系,可分为 前缀运算符.中缀运算符.后缀运算符 算术运算符 + - * / % ++ -- 关系运算符 == != < > >= <= 逻辑运 ...
- 十张图了解Docker【转】
这篇文章希望能够帮助读者深入理解Docker的命令,还有容器(container)和镜像(image)之间的区别,并深入探讨容器和运行中的容器之间的区别. 当我对Docker技术还是一知半解的时候,我 ...
- 【转】SVG与HTML、JavaScript的三种调用方式
原文:https://www.cnblogs.com/guohu/p/5085045.html SVG与HTML.JavaScript的三种调用方式 一.在HTMl中访问SVG的DOM 1 2 3 4 ...