lua 表操作


lua 表操作

      

             

                                

表的初始化

          

创建表

# 列表式:{value, value2, value3, ...}
t = {1,2,3,4}

# 记录式:(key=value, key2=value2, key3=value3, ...)
# key为lua标识符(只能由字母、数字、下划线组成)时,可不用中括号
# 不符合lua标识符规范的,需要用中括号括起来
t2 = {x='gtlx', y=2, z="hzw"}

# 混合使用列表示式、记录式:{value, value2, key=value3,...}
t3 = {1,2,3,key='瓜田李下'}

                       

示例:表初始化

Lua 5.4.4  Copyright (C) 1994-2022 Lua.org, PUC-Rio
-- 列表法表示
> t={1,2,3,4,5,6}
> #t
6

-- key、value表示
> t={t=1}
> t={t=1,t2=2}

-- 不能用纯数字标识key,且不能以数字开头
> t={1=1}
stdin:1: '}' expected near '='
> t={11=1}
stdin:1: '}' expected near '='
> t={1a=1}
stdin:1: malformed number near '1a'

> t={_a=1}
> t={_1=1}
> t={a1=1}

           

示例:表元素引用

Lua 5.4.4  Copyright (C) 1994-2022 Lua.org, PUC-Rio
> t={1,2,3,4,5,6}

-- 使用[1]引用数据,从1开始计数
> t[0]
nil
> t[1]
1
> t[2]
2

-- 不能用t.num
> t.1
stdin:1: syntax error near '.1'

-- key、value只能用t.key引用,不能用t.num
> t={t1=1,t2=2}
> t[1]
nil
> t.t1
1
> t.t2
2

          

示例:使用索引位添加表元素

Lua 5.4.4  Copyright (C) 1994-2022 Lua.org, PUC-Rio
> t={1,2,3,4,5,6}

-- 初始元素为6个
> #t
6

-- 在索引位8处添加元素
> t[8]=8
> #t
8

-- 在索引位9处添加元素
> t[9]=9
> #t
9

-- 在索引位20处添加元素,#t计算表的长度不精确
> t[20]=20
> #t
9

         

示例:使用key添加元素

Lua 5.4.4  Copyright (C) 1994-2022 Lua.org, PUC-Rio
> t={1,2,3,4,5,6}
> #t
6

-- 使用t.key添加元素,#t计算长度时不包括在内
> t.key='瓜田李下'
> #t
6

> t.key2='海贼王'
> #t
6

         

                

                                

遍历表

        

pairs:遍历所有的key

ipairs:从1开始遍历,步长为1,跳过不是整数的key,遇到不连续的整数终止

示例:pairs遍历表

Lua 5.4.4  Copyright (C) 1994-2022 Lua.org, PUC-Rio
> t={1,2,3,4,5,6}
> for key,value in pairs(t) do print(key,value) end
1	1
2	2
3	3
4	4
5	5
6	6

-- 添加表元素
> t.key='gtlx'
> for key,value in pairs(t) do print(key,value) end
1	1
2	2
3	3
4	4
5	5
6	6
key	gtlx

-- 修改表元素
> t[1]='hzw'
> for key,value in pairs(t) do print(key,value) end
1	hzw
2	2
3	3
4	4
5	5
6	6
key	gtlx

       

示例:ipairs遍历表

Lua 5.4.4  Copyright (C) 1994-2022 Lua.org, PUC-Rio
> t={1,2,3,4,5,6}

-- ipairs遍历输出连续整数key
> for key,value in ipairs(t) do print(key,value) end
1	1
2	2
3	3
4	4
5	5
6	6

-- 添加元素t[8]=8,该元素不输出
> t[8]=8
> for key,value in ipairs(t) do print(key,value) end
1	1
2	2
3	3
4	4
5	5
6	6

-- 初始化表时,后面元素的索引值如果没有指定,自动在原来整数key的基础上增1
-- 遍历输出时,跳过不是整数的key
> t2={1,2,3,4,a=5,6}
> for key,value in ipairs(t2) do print(key,value) end
1	1
2	2
3	3
4	4
5	6

       

             

                                

表拼接

    

table.concat(table、sep、start、end):拼接表,sep分隔符可选、start、end可选

         

示例:拼接列表式table

Lua 5.4.4  Copyright (C) 1994-2022 Lua.org, PUC-Rio
> t={1,2,3,4,5,6}

-- 拼接表,没有间隔符
> table.concat(t)
123456

-- 使用间隔符拼接
> table.concat(t,'a')
1a2a3a4a5a6

-- 使用数字间隔符拼接,指定起始位置
> table.concat(t,1,4)
41516

-- 使用字符串间隔符,指定起始位置
> table.concat(t,'a',4)
4a5a6

-- 使用未定义变量间隔符
> table.concat(t,a,4)
456

-- 使用已定义的变量间隔符
> a='ttt'
> table.concat(t,a,4)
4ttt5ttt6

          

示例 2:拼接key、value表

Lua 5.4.4  Copyright (C) 1994-2022 Lua.org, PUC-Rio
> t={a=1,b=2,c=3}
> table.concat(t)

# key、value式表无法拼接
> #table.concat(t)
0

        

                  

                                

插入元素

   

table.insert(table, pos, value):在表table中插入元素value,pos指定索引位(可选)

       

示例

Lua 5.4.4  Copyright (C) 1994-2022 Lua.org, PUC-Rio
-- 在末尾插入元素8
> t={1,2,3,4,5,6}
> table.insert(t,8)
> t[7]
8

-- 在索引位2处插入元素8
> table.insert(t,2,8)
> for key,value in pairs(t) do print(key,value) end
1	1
2	8
3	2
4	3
5	4
6	5
7	6
8	8


-- 在末尾插入元素8
> t2={1,2,3,4,5,6,key='gtlx'}
> table.insert(t2,8)
> t[7]
8
> for key,value in pairs(t2) do print(key,value) end
1	1
2	2
3	3
4	4
5	5
6	6
7	8
key	gtlx

           

              

                                

删除元素

   

table.remove(table,pos):移除表中元素,pos指定索引位(可选,默认移除最后一个元素)

       

示例

Lua 5.4.4  Copyright (C) 1994-2022 Lua.org, PUC-Rio
> t={1,2,3,4,5,6}

-- 默认移除最后一个元素
> table.remove(t)
6
> for key,value in pairs(t) do print(key,value) end
1	1
2	2
3	3
4	4
5	5

-- 移除元素后,后续元素的索引位向前移动
> table.remove(t,1)
1
> for key,value in pairs(t) do print(key,value) end
1	2
2	3
3	4
4	5

> t.key='瓜田李下'
> for key,value in pairs(t) do print(key,value) end
1	2
2	3
3	4
4	5
key	瓜田李下

-- remove方法只会移除索引元素,不会删除key、value对
> table.remove(t)
5
> for key,value in pairs(t) do print(key,value) end
1	2
2	3
3	4
key	瓜田李下

      

              

                                

移动元素

   

table.move(table, start, end, pos, new_table):移动元素,new_table可选

new_table存在:将元素移动到新表里面,table不变

new_table不存在:将start、end之间的元素,从pos位置开始复制到表table里

        

示例:移动到新表

Lua 5.4.4  Copyright (C) 1994-2022 Lua.org, PUC-Rio
> t={1,2,3,4,5,6}

-- 索引位从2开始计数
> t2={}
> table.move(t,1,4,2,t2)
table: 0x600002248880
> for key,value in pairs(t2) do print(key,value) end
2	1
3	2
4	3
5	4

-- 索引位从2开始计数
> t3={key='瓜田李下'}
> table.move(t,1,4,2,t3)
table: 0x600002240180
> for key,value in pairs(t3) do print(key,value) end
2	1
3	2
4	3
key	瓜田李下
5	4

     

示例:表里面移动元素

Lua 5.4.4  Copyright (C) 1994-2022 Lua.org, PUC-Rio
> t={1,2,3,4,5,6}

-- 移动1到2处的元素,从索引位6处开始覆盖
> table.move(t,1,2,6)
table: 0x600000234080
> for key,value in pairs(t) do print(key,value) end
1	1
2	2
3	3
4	4
5	5
6	1
7	2

-- 移动1到2处的元素,从索引位10处开始覆盖
> table.move(t,1,2,10)
table: 0x600000234080
> for key,value in pairs(t) do print(key,value) end
1	1
2	2
3	3
4	4
5	5
6	1
7	2
10	1
11	2

             

                

                                

元素排序

   

table.sort(table_name):对表元素排序

      

示例

Lua 5.4.4  Copyright (C) 1994-2022 Lua.org, PUC-Rio
> t={6,4,8,1,3,5,9}

-- 排序前
> for key,value in pairs(t) do print(key,value) end
1	6
2	4
3	8
4	1
5	3
6	5
7	9

-- 表元素排序
> table.sort(t)

-- 排序后
> for key,value in pairs(t) do print(key,value) end
1	1
2	3
3	4
4	5
5	6
6	8
7	9

        

           

                                

pack、unpack

   

table.pack(value, value2, ...):将元素整合,以table的形式返回

table.unpack(table_name, start, end):返回表中元素,start、end可选

       

示例

Lua 5.4.4  Copyright (C) 1994-2022 Lua.org, PUC-Rio
-- table.pack(value, value2, value3, ...)
> for key,value in pairs(table.pack(1,2,3)) do print(key,value) end
1	1
2	2
3	3
n	3

-- table.unpack(table, start, end)
> t={1,2,3,4,5,6}
> table.unpack(t)
1	2	3	4	5	6
> table.unpack(t,2,4)
2	3	4
> table.unpack(t,2,8)
2	3	4	5	6	nil	nil
> table.unpack(t,-1,8)
nil	nil	1	2	3	4	5	6	nil	nil

       

                

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Redis中使用Lua脚本可以通过Eval命令来实现。从Redis2.6版本开始,Eval命令使用内置的Lua解释器执行脚本,不需要单独安装Lua EVAL。具体的语法如下: ``` $ redis-cli --eval path/to/redis.lua KEYS KEYS , ARGV ARGV ... ``` 其中,`--eval`是告诉redis-cli读取并运行后面的Lua脚本,`path/to/redis.lua`是Lua脚本的位置,`KEYS KEYS`是要操作的键,可以指定多个,在Lua脚本中通过`KEYS[1], KEYS`获取,`ARGV ARGV`是参数,在Lua脚本中通过`ARGV, ARGV`获取。请注意,`KEYS`和`ARGV`之间的逗号两边的空格不能省略。 通过这种方式,你可以在Lua脚本中使用Redis提供的各种命令来对Redis进行操作。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [在redis里面使用lua](https://blog.csdn.net/Zx13170918986/article/details/124231119)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [Redis使用Lua脚本详解](https://blog.csdn.net/weixin_42653522/article/details/119712984)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值