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

Lua语法深入1

1. table构造器中,可以混用记录式(record-style)的和列表式(list-style)创建属性字段:

polyline = {color="blue",thickness=2,npoints=4, {x=0,        y=0},            --polyline[1]{x=-10,    y=0},           --polyline[2]{x=-10,    y=1},           --polyline[3]{x=0,    y=1},                --最后的这个“,”有也不报错}    

如上的构造器中,有局限,就是不能使用负数index和使用非规范的属性名,如果有这样的需要,要使用方括号“[ ]”:

opnames={["+"]="add",  [“-”]="sub", ["*"]="mul",  [“/”]="div"}i=20;  s="-"
a = {[i+0]=s, [i+1]=s..s, [i+2]=s..s..s }

使用#获得中间有nil值得table时,获得的结果并不可靠,此时需要将table长度显式地保存起来。

pairs遍历获得的元素顺序每次是随机的,ipairs遍历则是每次按固定顺序的。但实测中:前者遇到nil会跳过往下走,后者遇到第一个nil就结束遍历。

第3种方式就是用"for i=1, #t do"的数值型for循环遍历,这种方式将只输出列表式属性,无法输出记录式属性字段。

a={"Mon","Tus","Wed","Thurs","Fri", details={color="blue"}}print(#a)
for i=1,#a doprint(a[i])
end
print(string.rep("*",30))    --******************************
a[2]=nil
a[3]=nil
print(#a)
for k,v in pairs(a) doprint(k,v)
end
for k,v in ipairs(a) doprint(k,v)
end
E={}
color = ((a or E).details1 or E).color1    --避免属性不存在时报错的一种写法(如例:不存在details1),好比c#中的安全访问符"?."。这样写可减少对表元素验证是否存在时的每次重读
print(color) print(#a)

2. table.insert()在省略指定位置时,会插元素在table的最后。table.remove()不指定位置时,会删除最后一个元素。指定位置时,table.remove()会删除并返回该元素,并将其后的元素向前移动填充。

借助这2个函数,可以容易实现Stack、Queue和Double Queue(双端队列)。

如Stack的操作可以直接用来对栈顶元素做增加和删除。

Lua5.3新增的table.move(a, f, e, t)可以直接将表a中从索引f到e的元素(包括两端的元素本身)移动到索引t位置上。

table.move(a, 2, #a, 1)
a[#a]=nil      -- 往前复制覆盖时,要注意删除掉尾端相同数量的原位置上的元素擦屁股。 或者用table.remove(a)

table.move(a, 1, #a, 1, {}) --copy 表a的所有元素到新表,返回新表。即制作a的备份 table.move(a, 1, #a, #b+1, b) --copy表a的所有元素到表b末尾

 

http://www.jsqmd.com/news/79157/

相关文章:

  • 【题解】Luogu P13885 [蓝桥杯 2023 省 Java/Python A] 反异或 01 串
  • 期待回家,顺便写点年度总结
  • E No address added out of total 1 resolved地址绑定失败: No address added out of total 1 resolved errors:
  • 计算机论文题目推荐:8大平台+50例AI生成
  • 【笔记】Manacher
  • 八上期中考游记
  • C51_74HC165并口转串口
  • application.properties
  • 智能客服机器人产品设计
  • 【题解】Luogu B4185 [中山市赛 2024/科大国创杯小学组 2023] 倍数子串/子串
  • JavaScript 异常原因(Error Cause):实现分布式系统错误链追踪的序列化与反序列化
  • 毕业论文任务书范文推荐:7大平台+AI修改工具
  • Python字典与集合:解锁高效数据处理的关键,90%的人没吃透这几点
  • 天远多头借贷行业风险版API接口调用代码流程、接入方法以及应用场景
  • 详细介绍:完整事务性能瓶颈分析案例:支付系统事务雪崩优化
  • 计算机论文选题推荐:9大AI+热门方向排名
  • JavaScript 记录(Records)与 元组(Tuples):实现堆内存中不可变复合数据结构的内存布局
  • 5 分钟快速入门 Github Actions
  • 虚函数虚表
  • 线程并发编程,同步与互斥机制
  • Python列表与元组:搞懂这3个核心差异,再也不纠结用哪个
  • MQ消息队列相关知识与对比
  • 已有析音法
  • 完整教程:PPT导出为图片的格式选择:JPG与PNG的区别
  • 不能头脑简单地搞“凡是”:凡是偶数2n(n的变域是N)必∈N
  • Docker 两大基石:Namespace 和 Cgroups
  • 告别排版困境!AI 写作到发布全自动化的完整方案
  • 9、Eclipse集成开发环境:C/C++开发全流程指南
  • 享搭提醒助手:数据变动实时预警,运营者业务状态“尽在掌握”
  • Python银行客户数据流失预测SMOTE平衡数据实现神经网络、SVM、决策树、随机森林与超参数调优|附代码数据