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

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

一、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

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值