当前位置: 首页 > news >正文

Lua中字典型table的增删操作

table

table(表)是 Lua 中一种基础且使用频率极高的数据结构,他的本质是“关联数组”!

根据内部元素的不同,我们一般可以将 table 分为数组型 table 和字典型(键值对型)table :

  • 数组型 table :将元素的值顺序存储到 table 中,元素的索引为从1开始连续递增的整数。例如:
arrayTbl = {3, 5, 7}

arrayTbl 对应的 key 为:1, 2, 3

  • 字典型 table :将元素的键值对按照键的哈希值顺序存储到 table 中,元素的索引为键值对的键。例如:
kvTbl = {id = 123, level = 99, score = 100}

kvTbl 对应的 key 为:"id","level","score"

数组型table的增删

对数组型 table 进行增删操作直接使用 Lua 自带的 table 操作函数 table.insert 和 table.remove 即可!例如:

-- 数组型table
local arrayTbl = {3, 5, 7}
-- 增
table.insert(arrayTbl, 9)  -- {3, 5, 7, 9}
-- 删
table.remove(arrayTbl, 1)  -- {5, 7, 9}

ps

table.insert 和 table.remove 的具体使用方法:Lua table之增删table.insert和table.remove

字典型table的增删

然而对于字典型的 table,Lua 自带的 table 操作函数一般都是不适用的!

从 table.insert(list, [pos, ]value) 和 table.remove(list[, pos]) 的 API 就可以看到这两个函数都是与 pos 相关的,而字典型的 table 我们取不到 pos !

so,字典型的table如何进行增删操作呢?

其实很 easy,如下:

-- 字典型table
local kvTbl = {id = 123, level = 99, score = 100}
-- dump(kvTbl)  -- {"level" = 99, "score" = 100, "id" = 123} 存储的顺序与table定义时的顺序并不相同
-- 增
kvTbl["rank"] = 66
-- dump(kvTbl)  -- {"level" = 99, "score" = 100, "rank" = 66, "id" = 123}
kvTbl.count = 88
-- dump(kvTbl)  -- {"score" = 100, "id" = 123, "count" = 88, "rank" = 66, "level" = 99}
-- 删
kvTbl["score"] = nil
-- dump(kvTbl)  -- {"id" = 123, "rank" = 66, "level" = 99, "count" = 88}
kvTbl.rank = nil
-- dump(kvTbl)  -- {"id" = 123, "level" = 99, "count" = 88}

相关文章:

  • Lua实战之整体移动table中的元素
  • IT人如何生存
  • cocos2d-lua:获取子节点
  • cocos2d-lua:剪裁头像
  • Symbian中操作ini文件
  • Lua中保留两位小数
  • 2006年第三季度中国ERP市场规模与市场份额
  • Lua实战之拆分整数
  • ORACLE四大战略拓展CRM市场
  • cocos2d-lua:生成短网址
  • 马宁的Windows Mobile开发讨论区开张!
  • cocos2d-lua:退出游戏
  • win查看应用程序(.exe)调用的动态链接库文件(.dll)信息
  • 教你做一个优秀的项目经理
  • cocos2dx:由于找不到xxx.dll,无法继续执行代码...
  • 【162天】黑马程序员27天视频学习笔记【Day02-上】
  • AHK 中 = 和 == 等比较运算符的用法
  • GDB 调试 Mysql 实战(三)优先队列排序算法中的行记录长度统计是怎么来的(上)...
  • Git 使用集
  • JavaScript对象详解
  • Java的Interrupt与线程中断
  • Java读取Properties文件的六种方法
  • jquery ajax学习笔记
  • Lucene解析 - 基本概念
  • Netty 4.1 源代码学习:线程模型
  • orm2 中文文档 3.1 模型属性
  • Python实现BT种子转化为磁力链接【实战】
  • SpriteKit 技巧之添加背景图片
  • SwizzleMethod 黑魔法
  • Web设计流程优化:网页效果图设计新思路
  • 后端_MYSQL
  • 浅谈web中前端模板引擎的使用
  • 手写双向链表LinkedList的几个常用功能
  • 提醒我喝水chrome插件开发指南
  • 以太坊客户端Geth命令参数详解
  • 异常机制详解
  • AI算硅基生命吗,为什么?
  • FaaS 的简单实践
  • ​LeetCode解法汇总2583. 二叉树中的第 K 大层和
  • ​MPV,汽车产品里一个特殊品类的进化过程
  • #绘制圆心_R语言——绘制一个诚意满满的圆 祝你2021圆圆满满
  • (C语言)求出1,2,5三个数不同个数组合为100的组合个数
  • (八)Spring源码解析:Spring MVC
  • (附源码)spring boot儿童教育管理系统 毕业设计 281442
  • (数据结构)顺序表的定义
  • (一)基于IDEA的JAVA基础1
  • ***测试-HTTP方法
  • .apk 成为历史!
  • .halo勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .java 9 找不到符号_java找不到符号
  • .Net 8.0 新的变化
  • .NET CF命令行调试器MDbg入门(二) 设备模拟器
  • .net6+aspose.words导出word并转pdf
  • [ Linux Audio 篇 ] 音频开发入门基础知识
  • [Android 数据通信] android cmwap接入点