Lua(>=5.3)中的table.move实例讲解

本文深入解析Lua中的table操作,包括table.concat用于连接表中的特定项,table.move用于移动表元素,table.insert用于在指定位置插入元素,以及table.remove用于删除指定位置的元素。通过实例演示了这些函数的使用方法。
该文章已生成可运行项目,

为了方便输出,我们这里先介绍另外一个

一、table.concat

原型:table.concat (table [, sep [, i [, j]]])

解释:返回表中的特定项连接后的数据,要求所连接的数据必须为数字或者字符串,
级返回table[i]..sep..table[i+1] ··· sep..table[j],其中参数sep表示连接符,
默认为空字符串"",参数i默认为1,参数j默认是table的length,如果参数i大于j的话,返回空字符串""

举例:

tbl = {"a","b","c"} newtbl = {1,2,3,5}
print(table.concat(tbl,",")) -------> 输出是:a,b,c

对于数组(数字下标只能从1开始,并且往后下标是连续的才能被处理到,如果断开就结束了)来说,就是添加分隔符,对于我们这篇博文掌握到此就可以了。
如果您想详细地学习table.concat,可以参考:Lua table.concat()

二、table.move

原型:table.move(a1,f,e,t[,a2])
函数作用: 把表a1中从下标f到e的value移动到表a2中,位置为a2下标从t开始
函数参数: 表a1,a1下标开始位置f,a1下标结束位置e,t选择移动到的开始位置(如果没有a2,默认a1的下标)

举例:

tbl = {"a","b","c"} 
newtbl = {1,2,3,5}

table.move(tbl, 2, 3, 2, newtbl)

print(table.concat(tbl,",")) -------> a,b,c

print(table.concat(newtbl,",")) -------> 1,b,c,5

table.move(tbl,2,3,2)

print(table.concat(tbl,",")) -------> a,b,c

table.move(tbl, 1, #tbl, 2)

print(table.concat(tbl,",")) -------> a,a,b,c

讲解:
table.move(tbl, 2, 3, 2, newtbl)
将tbl表中的xia下标从2到3的元素tbl[2]到tbl[3]的元素复制到newtbl中,从newtbl[2]开始。
此时tbl中的元素都没有发生改变,改变的是newtbl中的元素。此时newtbl[2]到newtbl[3]被tbl[2]到tbl[3]的值覆盖了。

table.move(tbl,2,3,2)
此时没有第二个table,那么这个操作就只是tbl自身进行操作,不涉及第二个table
tbl[2]到tbl[3]去给tbl[2]到tbl[3]赋值

print(table.concat(tbl,",")) -------> a,a,b,c

tbl[1]到tbl[#tbl]去给tbl[2]开始依次赋值,就相当于是把tbl从2开始依次后挪了一位

table.move(tbl, 1, #tbl, 2)
tbl[1] = 新的值

这时候我们就能用table.move去实现数组前插入的功能。

那有人会说了,要实现这个在table某个位置插入,完全还可以用table.insert

三、table.insert

table.insert(list, [pos, ]value)
在表list中的pos位置插入元素value,并将原来在pos位置以及在pos位置后面的元素往后移。
pos为可选参数,默认值是#list+1,所以table.insert(list, value)会将元素value插入到表list的末尾处!

确实如此,table.insert只是对一个table进行操作。

tbl = {"a","b","c"} 

table.insert(tbl, 5)

table.insert(tbl, 2, "set")

print(table.concat(tbl,", ")) -------> a, set, b, c, 5

讲解:
table.insert(tbl, 5),这里只输入了两个参数,就是默认在tbl的表尾部插入一个5的元素,即tbl[#tbl] = 5;
table.insert(tbl, 2, “set”),是在原来的tbl[2]先依次往后挪动一个位置,然后tbl[2]=“set”

四、table.remove

对table的操作,有插入,就有删除,我们看看

table.remove(list[, pos])
移除表list中pos位置的元素,并将原来在pos位置后面的元素往前移(如果有必要),
返回这个被移除的值。pos为可选参数,默认值是#list,所以table.remove(list)会移除表list中的最后一个元素!

举例:

tbl = {"a", "b", "c", "d", "e"} 

local element = table.remove(tbl, 4)
print(element)  -->输出d
print(table.concat(tbl,", ")) -->输出a, b, c, e

element = table.remove(tbl)
print(element)   -->输出e
print(table.concat(tbl,", ")) -->输出a, b, c

注意点:在for循环中进行删除操作的时候,应该从后往前倒序遍历,如果从前往后顺序遍历的话有可能会漏掉一些项!
这table.insert和table.remove函数只适用于数组型table的增删!

参考:
Lua table.concat()
LUA(>=5.3)中的table函数库
Lua table之增删table.insert和table.remove

本文章已经生成可运行项目
变量名: tonumber, 变量值: <Lua function at 0x00007FF8A9905C90> >> <class &#39;lupa.lua54._LuaFunction&#39;> 变量名: debug_hook, 变量值: <Lua function at 0x000001DD867D1220> >> <class &#39;lupa.lua54._LuaFunction&#39;> 变量名: rawequal, 变量值: <Lua function at 0x00007FF8A99062C0> >> <class &#39;lupa.lua54._LuaFunction&#39;> 变量名: io, 变量值: <Lua table at 0x000001DD867B2040> >> <class &#39;lupa.lua54._LuaTable&#39;> 变量名: require, 变量值: <Lua function at 0x000001DD867B1640> >> <class &#39;lupa.lua54._LuaFunction&#39;> 变量名: rawset, 变量值: <Lua function at 0x00007FF8A99065C0> >> <class &#39;lupa.lua54._LuaFunction&#39;> 变量名: pcall, 变量值: <Lua function at 0x00007FF8A9907C10> >> <class &#39;lupa.lua54._LuaFunction&#39;> 变量名: table, 变量值: <Lua table at 0x000001DD867B2080> >> <class &#39;lupa.lua54._LuaTable&#39;> 变量名: rawget, 变量值: <Lua function at 0x00007FF8A99064A0> >> <class &#39;lupa.lua54._LuaFunction&#39;> 变量名: string, 变量值: <Lua table at 0x000001DD867B15C0> >> <class &#39;lupa.lua54._LuaTable&#39;> 变量名: rawlen, 变量值: <Lua function at 0x00007FF8A99063D0> >> <class &#39;lupa.lua54._LuaFunction&#39;> 变量名: warn, 变量值: <Lua function at 0x00007FF8A9905A50> >> <class &#39;lupa.lua54._LuaFunction&#39;> 变量名: print, 变量值: <Lua function at 0x000001DD867D12B0> >> <class &#39;lupa.lua54._LuaFunction&#39;> 变量名: next, 变量值: <Lua function at 0x00007FF8A9906B50> >> <class &#39;lupa.lua54._LuaFunction&#39;> 变量名: setmetatable, 变量值: <Lua function at 0x00007FF8A99061C0> >> <class &#39;lupa.lua54._LuaFunction&#39;> 变量名: getmetatable, 变量值: <Lua function at 0x00007FF8A99060E0> >> <class &#39;lupa.lua54._LuaFunction&#39;> 变量名: _G, 变量值: <Lua table at 0x000001DD85B47B30> >> <class &#39;lupa.lua54._LuaTable&#39;> 变量名: debug, 变量值: <Lua table at 0x000001DD867B1D00> >> <class &#39;lupa.lua54._LuaTable&#39;> 变量名: collectgarbage, 变量值: <Lua function at 0x00007FF8A9906740> >> <class &#39;lupa.lua54._LuaFunction&#39;> 变量名: select, 变量值: <Lua function at 0x00007FF8A9907A40> >> <class &#39;lupa.lua54._LuaFunction&#39;>变量名: utf8, 变量值: <Lua table at 0x000001DD867B1600> >> <class &#39;lupa.lua54._LuaTable&#39;> 变量名: math, 变量值: <Lua table at 0x000001DD867B1580> >> <class &#39;lupa.lua54._LuaTable&#39;> 变量名: new_write, 变量值: <Lua function at 0x000001DD867D1430> >> <class &#39;lupa.lua54._LuaFunction&#39;> 变量名: dofile, 变量值: <Lua function at 0x00007FF8A9907810> >> <class &#39;lupa.lua54._LuaFunction&#39;> 变量名: simple_handler, 变量值: <function LuaDebugger._setup_lua_output_redirect_safe.<locals>.simple_handler at 0x000001DD8675DAB0> >> <class &#39;function&#39;> 变量名: python, 变量值: <Lua table at 0x000001DD867B2100> >> <class &#39;lupa.lua54._LuaTable&#39;> 变量名: python_debug_hook, 变量值: <bound method LuaDebugger._debug_hook of <cls.utils.script_manage.debugger3.LuaDebugger object at 0x000001DD8643FF10>> >> <class &#39;method&#39;> 变量名: os, 变量值: <Lua table at 0x000001DD867B1A40> >> <class &#39;lupa.lua54._LuaTable&#39;> 变量名: load, 变量值: <Lua function at 0x00007FF8A9907370> >> <class &#39;lupa.lua54._LuaFunction&#39;> 变量名: _VERSION, 变量值: Lua 5.4 >> <class &#39;str&#39;> 变量名: loadfile, 变量值: <Lua function at 0x00007FF8A9906F80> >> <class &#39;lupa.lua54._LuaFunction&#39;> 变量名: error, 变量值: <Lua function at 0x00007FF8A9906070> >> <class &#39;lupa.lua54._LuaFunction&#39;> 变量名: package, 变量值: <Lua table at 0x000001DD85B47EB0> >> <class &#39;lupa.lua54._LuaTable&#39;> 变量名: pairs, 变量值: <Lua function at 0x00007FF8A9906C50> >> <class &#39;lupa.lua54._LuaFunction&#39;> 变量名: assert, 变量值: <Lua function at 0x00007FF8A99079A0> >> <class &#39;lupa.lua54._LuaFunction&#39;> 变量名: ipairs, 变量值: <Lua function at 0x00007FF8A9906E40> >> <class &#39;lupa.lua54._LuaFunction&#39;> 变量名: new_print, 变量值: <Lua function at 0x000001DD867D12B0> >> <class &#39;lupa.lua54._LuaFunction&#39;> 变量名: tostring, 变量值: <Lua function at 0x00007FF8A9907E70> >> <class &#39;lupa.lua54._LuaFunction&#39;> 变量名: type, 变量值: <Lua function at 0x00007FF8A9906AA0> >> <class &#39;lupa.lua54._LuaFunction&#39;> 变量名: coroutine, 变量值: <Lua table at 0x000001DD867B1480> >> <class &#39;lupa.lua54._LuaTable&#39;> 变量名: xpcall, 变量值: <Lua function at 0x00007FF8A9907D10> >> <class &#39;lupa.lua54._LuaFunction&#39;>
最新发布
12-16
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值