Lua速成(5)table

一、table

table 是 Lua 的一种数据结构用来帮助我们创建不同的数据类型,如:数组、字典等。

Lua table 使用关联型数组,你可以用任意类型的值来作数组的索引,但这个值不能是 nil。

Lua table 是不固定大小的,你可以根据自己需要进行扩容。

Lua也是通过table来解决模块(module)、包(package)和对象(Object)的。 例如string.format表示使用"format"来索引table string。

1.构造

-- 初始化表
mytable = {}-- 指定值
mytable[1]= "Lua"-- 移除引用
mytable = nil
-- lua 垃圾回收会释放内存
-- 简单的 table
mytable = {}
print("mytable 的类型是 ",type(mytable))mytable[1]= "Lua"
mytable["wow"] = "修改前"
print("mytable 索引为 1 的元素是 ", mytable[1])
print("mytable 索引为 wow 的元素是 ", mytable["wow"])-- alternatetable和mytable的是指同一个 table
alternatetable = mytableprint("alternatetable 索引为 1 的元素是 ", alternatetable[1])
print("mytable 索引为 wow 的元素是 ", alternatetable["wow"])alternatetable["wow"] = "修改后"print("mytable 索引为 wow 的元素是 ", mytable["wow"])-- 释放变量
alternatetable = nil
print("alternatetable 是 ", alternatetable)-- mytable 仍然可以访问
print("mytable 索引为 wow 的元素是 ", mytable["wow"])mytable = nil
print("mytable 是 ", mytable)
mytable 的类型是     table
mytable 索引为 1 的元素是     Lua
mytable 索引为 wow 的元素是     修改前
alternatetable 索引为 1 的元素是     Lua
mytable 索引为 wow 的元素是     修改前
mytable 索引为 wow 的元素是     修改后
alternatetable 是     nil
mytable 索引为 wow 的元素是     修改后
mytable 是     nil

2.操作

1.contact 连接

table.concat (table [, sep [, start [, end]]]):

concat是concatenate(连锁, 连接)的缩写. table.concat()函数列出参数中指定table的数组部分从start位置到end位置的所有元素, 元素间以指定的分隔符(sep)隔开。

fruits = {"banana","orange","apple"}
-- 返回 table 连接后的字符串
print("连接后的字符串 ",table.concat(fruits))-- 指定连接字符
print("连接后的字符串 ",table.concat(fruits,", "))-- 指定索引来连接 table
print("连接后的字符串 ",table.concat(fruits,", ", 2,3))
连接后的字符串     bananaorangeapple
连接后的字符串     banana, orange, apple
连接后的字符串     orange, apple

2.insert 插入

table.insert (table, [pos,] value):

在table的数组部分指定位置(pos)插入值为value的一个元素. pos参数可选, 默认为数组部分末尾

3.remove 移除

table.remove (table [, pos])

返回table数组部分位于pos位置的元素. 其后的元素会被前移. pos参数可选, 默认为table长度, 即从最后一个元素删起。

fruits = {"banana","orange","apple"}-- 在末尾插入
table.insert(fruits,"mango")
print("索引为 4 的元素为 ",fruits[4])-- 在索引为 2 的键处插入
table.insert(fruits,2,"grapes")
print("索引为 2 的元素为 ",fruits[2])print("最后一个元素为 ",fruits[5])
table.remove(fruits)
print("移除后最后一个元素为 ",fruits[5])
索引为 4 的元素为     mango
索引为 2 的元素为     grapes
最后一个元素为     mango
移除后最后一个元素为     nil

4.sort 升序排序

table.sort (table [, comp])

对给定的table进行升序排序。

fruits = {"banana","orange","apple","grapes"}
print("排序前")
for k,v in ipairs(fruits) doprint(k,v)
endtable.sort(fruits)
print("排序后")
for k,v in ipairs(fruits) doprint(k,v)
end
排序前
1    banana
2    orange
3    apple
4    grapes
排序后
1    apple
2    banana
3    grapes
4    orange

5.maxn 最大值

table.maxn (table)

指定table中所有正数key值中最大的key值. 如果不存在key值为正数的元素, 则返回0。(Lua5.2之后该方法已经不存在了,本文使用了自定义函数实现)

function table_maxn(t)local mn=nil;for k, v in pairs(t) doif(mn==nil) thenmn=vendif mn < v thenmn = vendendreturn mn
end
tbl = {[1] = 2, [2] = 6, [3] = 34, [26] =5}
print("tbl 最大值:", table_maxn(tbl))
print("tbl 长度 ", #tbl)
tbl 最大值:    34
tbl 长度     3

注意:

当我们获取 table 的长度的时候无论是使用 # 还是 table.getn 其都会在索引中断的地方停止计数,而导致无法正确取得 table 的长度。

可以使用以下方法来代替:

function table_leng(t)local leng=0for k, v in pairs(t) doleng=leng+1endreturn leng;
end

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/706291.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

springboot-基础-eclipse集成mybatis+使用方法+排错

备份笔记。所有代码都是2019年测试通过的&#xff0c;如有问题请自行搜索解决&#xff01; 目录 集成mybatis安装mybatis的jar包安装插件&#xff1a;mybatis-generator安装方法生成方法报错&#xff1a;java.lang.RuntimeException: Exception getting JDBC Driver mybatis注解…

数据之美:用山海鲸展现数据魅力

在数据分析领域&#xff0c;数据可视化是一个至关重要的环节。作为一名资深的数据分析师&#xff0c;我深知一个直观、易于理解的数据可视化看板对于传达信息、辅助决策的重要性。今天&#xff0c;我将以自己在用的山海鲸可视化软件为例&#xff0c;与大家分享如何制作一个高效…

LeetCode 热题 100 | 图论(上)

目录 1 200. 岛屿数量 2 994. 腐烂的橘子 2.1 智障遍历法 2.2 仿层序遍历法 菜鸟做题&#xff0c;语言是 C 1 200. 岛屿数量 解题思路&#xff1a; 遍历二维数组&#xff0c;寻找 “1”&#xff08;若找到则岛屿数量 1&#xff09;寻找与当前 “1” 直接或间接连接在…

项目登录方案选型

一.Cookie + Session 登录 大家都知道,HTTP 是一种无状态的协议。无状态是指协议对于事务处理没有记忆能力,服务器不知道客户端是什么状态。即我们给服务器发送 HTTP 请求之后,服务器根据请求返回数据,但不会记录任何信息。为了解决 HTTP 无状态的问题,出现了 Cookie。Co…

离线数仓(四)【数仓数据同步策略】

前言 今天来把数仓数据同步解决掉&#xff0c;前面我们已经把日志数据到 Kafka 的通道打通了。 1、实时数仓数据同步 关于实时数仓&#xff0c;我们的 Flink 直接去 Kafka 读取即可&#xff0c;我们在学习 Flink 的时候也知道 Flink 提供了 Kafka Source&#xff0c;所以这里不…

协议-http协议-基础概念02-请求应答过程-请求响应报文结构-头部字段-请求方法-响应方式

参考来源&#xff1a; 极客时间-透视HTTP协议(作者&#xff1a;罗剑锋)&#xff1b; web抓包实战课-陶辉&#xff1b; 01-HTTP协议请求-应答过程 最简单的浏览器 HTTP 请求过程 浏览器从地址栏的输入中获得服务器的 IP 地址和端口号&#xff1b;浏览器用 TCP 的三次握手与服…

CSS复合选择器(一)

CSS复合选择器&#xff08;一&#xff09; 1.交集选择器2. 并集选择器3. 后代选择器4. 子代选择器5.兄弟选择器5.1相邻兄弟选择器&#xff1a;5.2通用兄弟选择器&#xff1a; 6.属性选择器 1.交集选择器 作用&#xff1a;选中同时符合多个条件的元素。 交集有并且的含义&#…

基于springboot的4S店车辆管理系统源码和论文

随着信息技术和网络技术的飞速发展&#xff0c;人类已进入全新信息化时代&#xff0c;传统管理技术已无法高效&#xff0c;便捷地管理信息。为了迎合时代需求&#xff0c;优化管理效率&#xff0c;各种各样的管理系统应运而生&#xff0c;各行各业相继进入信息管理时代&#xf…

python中写monogo的uri参数里,为什么有多个IP,是连接多个服务器吗

问题来源&#xff1a; 代码如下&#xff1a; from pymongo import MongoClientmongo_uri "mongodb://admin:password192.168.93.23:32725,192.132.9.35:32740,192.22.16.42:30538/?" # 创建MongoClient实例 client MongoClient(mongo_uri)为什么uri中会存在多个…

win10开机黑屏,只有鼠标,解决方案

问题描述 win10进不去桌面&#xff0c;可以进去锁屏&#xff0c;只有鼠标&#xff0c;也能进去任务管理器&#xff08;ctrlwindelete&#xff09;, 问题分析 进入任务管理器->文件->运行新任务 然后输入 explorer.exe 发现找不到了 原因&#xff1a;误删explorer.exe …

Linux系统---nginx(1)服务

目录 一.Nginx概述 1.定义 2.Nginx模块作用 &#xff08;1&#xff09;main模块 &#xff08;2&#xff09;stream服务模块 &#xff08;3&#xff09;邮件服务模块 &#xff08;4&#xff09;第三方模块 &#xff08;5&#xff09;events模块 &#xff08;6&#xff0…

300分钟吃透分布式缓存-16讲:常用的缓存组件Redis是如何运行的?

Redis 基本原理 Redis 简介 Redis 是一款基于 ANSI C 语言编写的&#xff0c;BSD 许可的&#xff0c;日志型 key-value 存储组件&#xff0c;它的所有数据结构都存在内存中&#xff0c;可以用作缓存、数据库和消息中间件。 Redis 是 Remote dictionary server 即远程字典服务…

SpringCloud有哪些组件

什么是SpringCloud&#xff1f; Spring Cloud是基于Spring Boot的分布式系统开发工具&#xff0c;它提供了一系列开箱即用的、针对分布式系统开发的特性和组件&#xff0c;用于帮助开发人员快速构建和管理云原生应用程序。 Spring Cloud的主要目标是解决分布式系统中的常见问题…

linux使用 busybox microcom AT指令测试4G/5G模块

1、busybox microcom命令使用方法如下&#xff1a; 参数&#xff1a; -d&#xff1a;表示延时时间&#xff0c;一般不设置。 -t&#xff1a;表示超时时间&#xff0c;超多长时间后该命令自动退出。单位为ms。 -s&#xff1a;表示传输速度&#xff0c;即串口波特率。 -X&#…

阿里云oss工具ossutil使用手册(windows)

一、下载安装 下载地址和教程 安装ossutil。 单击下载链接下载Windows安装包。 将工具解压&#xff0c;并双击运行ossutil.bat文件。 配置ossutil。 输入配置命令。 ossutil config 根据提示设置配置文件路径。 请输入配置文件名&#xff0c;文件名可以带路径&#xff08;…

代码随想录算法训练营第二十七天补|39. 组合总和 ● 40.组合总和II ● 131.分割回文串

组合问题&#xff1a;集合内元素的组合&#xff0c;不同集合内元素的组合 分割问题&#xff1a;本质还是组合问题&#xff0c;注意一下如何分割字符串 回溯模板伪代码 void backtracking(参数) {if (终止条件) {存放结果;return;}for (选择&#xff1a;本层集合中元素&#xf…

HTML5 增加了辅助 DOM 焦点管理的功能

焦点管理 ​ HTML5 增加了辅助 DOM 焦点管理的功能。 ​ activeElement 可以用来查询文档&#xff0c;确定哪个元素拥有焦点&#xff0c;hasFocus() 方法可以查询文档是否获得了焦点&#xff0c; 而这对于保证 Web 应用程序的无障碍使用是非常重要的。无障碍 Web 应用程序的一…

算法提升——LeetCode第 386 场周赛总结

题目 分割数据 给你一个长度为偶数的整数数组nums。你需要将这个数组分割成nums1和nums2两部分&#xff0c;要求&#xff1a; nums1.lengthnums2.lengthnums.length/2。 nums1应包含互不相同的元素。 nums2也应包含互不相同的元素。 如果能够分割数组就返回true&#xff0c;…

vue2 项目 vscode 配置

安装node.js 下载https://nodejs.org/zh-cn/download/ 安装到目录D:\nodejs&#xff08;自定义&#xff0c;不能有空格、中文、特殊字符&#xff09;配置环境变量&#xff0c;将安装目录加入Path环境变量配置npm 在安装目录新建 node_cache 和 node_global 两个文件夹&#xff…

Maven入门:Java项目构建和管理的利器

Maven入门&#xff1a;Java项目构建和管理的利器 Maven 是一个项目管理和综合工具&#xff0c;它基于项目对象模型&#xff08;POM&#xff09;概念。Maven 可以管理项目的构建、报告和文档。以下是一篇介绍 Maven 配置和应用的教程文章。 Maven简介 Maven 使用其核心概念 POM…