Lua 的 table 是什么数据结构?如何创建和访问?

数据结构:Lua的table是一种哈希表,使用键值对存储数据,支持动态扩容
创建方式:

local t1 = {}
local t2 = {10,20,30}
local t3 = {name="Alice",age=25}

访问方式:

print(t2[1])
print(t3.name)
print(t3["age"])

table的索引可以是什么类型?

键(key):可以是任意可哈希类型(如 number、string、boolean、table、function 等),但是 nil 不能作为键(因为 nil 表示“不存在”)
值(value):可以是任意类型,包括 nil

local t = {}
t[10] = "num"
t["key"] = 20
t[true] = {}
t[t] = function() end

如何遍历table? ipairs 和 pairs 的区别?

ipairs:用于遍历数组部分,遇到第一个 nil 时停止
pairs:遍历整个 table(包括数组和哈希部分),顺序不固定


-- ipairs 输出:10
local t = {10,nil,30,name="Alice"}
for i,v in ipairs(t) doprint(i, v)
end-- pairs 输出(顺序可能不同):
-- 1   10
-- 3   30
-- name Alice
for k,v in pairs(t) doprint(k, v)
end

如何删除table中的元素?

local t = {10,20,30}
t[10] = nil    -- 删除索引 2 的元素(中间元素删除后,数组长度不变)local t = {name="Alice",age=25}
t.name = nil
table.remove(t,2) --删除第2 个元素
table.remove(t) --默认删除最后一个元素for k in pairs(t) dot[k] = nil
endt = {}

table.sort()的注意事项?

  • 仅适用于数组部分
  • 必须提供比较函数(如果比提供,默认按升序比较)
  • 比较函数需满足严格弱序
local t = {3,1,4,2}
table.sort(t, function(a,b)return a>b
end)
print(table.unpack(t))

如何实现table的深拷贝?

浅拷贝仅复制引用,深拷贝需递归复制所有嵌套 table

function deepcopy(t)if type(t) ~= table then return t endlocal copy = {}for k, v in pairs(t) docopy[deepcopy(k)] = deepcopy(v)endreturn setmetatable(copy, getmetatable(t))
end

table的元表 metatable 友什么作用?

元表允许自定义 table 的行为(如运算符重载、属性访问等)常见元方法:

  • __index:访问不存在的键时触发
  • __newindex:修改不存在的键时触发
  • __add:定义 +运算法行为

table和数组的区别?

table:动态哈希表,键可以是任意类型(除了 nil),索引可离散
数组:特殊的 table,键为连续整数,通过#获取长度

如何高效的向 table 末尾添加元素?

table.insert(t, 4)
t[#t + 1] = 5

Lua table如何实现几何(Set)?

利用 table 的键唯一性,将元素作为键存储:

local set = {}function set:add(value)self[value] = true
endfunction set:remove(value)self[value] = nil
end-- 检查元素是否存在
function set:contains(value)return self[value] ~= nil
end-- 使用示例
local s = setmetatable({}, set)
s:add(10)
s:add(20)
print(s:contains(10))  -- 输出:true

坚持每日一题,Lua 功力必涨!🔥

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

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

相关文章

实现自动胡批量抓取唯品会商品详情数据的途径分享(官方API、网页爬虫)

在电商领域,数据就是企业的核心资产。无论是市场分析、竞品研究,还是精准营销,都离不开对大量商品详情数据的深入挖掘。唯品会作为知名的电商平台,其丰富的商品信息对于众多从业者而言极具价值。本文将详细探讨实现自动批量抓取唯…

Zephyr 高阶实践:彻底讲透 west 构建系统、模块管理与跨平台 CI/CD 配置

本文是 Zephyr 项目管理体系的高阶解构与实战指南,全面覆盖 west 构建系统原理、模块解耦与 west.yml 多模块维护机制,结合企业级多平台 CI/CD 落地流程,深入讲解如何构建可靠、可维护、跨芯片架构的一体化 Zephyr 工程。 一、为什么 Zephyr …

我开源了一套springboot3快速开发模板

我开源了一套springboot3快速开发模板 开箱即用、按需组合、可快速二次开发的后端通用模板。 ✨ 主要特性 Spring Boot 3.x Java 17:跟随 Spring 最新生态,利用现代语法特性。多模块分层:common 抽象通用能力、starter 负责启动、modules…

OpenCV CUDA模块设备层-----在GPU上计算两个uchar1类型像素值的反正切(arctangent)比值函数atan2()

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 对输入的两个 uchar1 像素值 a 和 b,先分别归一化到 [0.0, 1.0] 浮点区间,然后计算它们的 四象限反正切函数。 函数原型…

从C++编程入手设计模式——观察者模式

从C编程入手设计模式——观察者模式 ​ 观察者模式简直就是字如其名,观察观察,观察到了告诉别人。观察手的作用如此,观察者模式的工作机制也是如此。这个模式的核心思路是:一个对象的状态发生变化时,自动通知依赖它的…

MITM 中间人攻击

​据Akamai 2023网络安全报告显示,MITM攻击在数据泄露事件中占比达32.7%,平均每次事件造成企业损失$380,000​ ​NIST研究指出:2022-2023年高级MITM攻击增长41%,近70%针对金融和医疗行业​ 一、MITM攻击核心原理与技术演进 1. 中…

llama_index chromadb实现RAG的简单应用

此demo是自己提的一个需求:用modelscope下载的本地大模型实现RAG应用。毕竟大模型本地化有利于微调,RAG使内容更有依据。 为什么要用RAG? 由于大模型存在一定的局限性:知识时效性不足、专业领域覆盖有限以及生成结果易出现“幻觉…

TDMQ CKafka 版事务:分布式环境下的消息一致性保障

解锁 CKafka 事务能力的神秘面纱 在当今数字化浪潮下,分布式系统已成为支撑海量数据处理和高并发业务的中流砥柱。但在这看似坚不可摧的架构背后,数据一致性问题却如影随形,时刻考验着系统的稳定性与可靠性。 CKafka 作为分布式流处理平台的…

常见的负载均衡算法

常见的负载均衡算法 在实现水平扩展过程中,负载均衡算法是决定请求如何在多个服务实例间分配的核心逻辑。一个合理的负载均衡策略能够有效分散系统压力,提升系统吞吐能力与稳定性。 负载均衡算法可部署在多种层级中,如七层HTTP反向代理&…

数据结构转换与离散点生成

在 C 开发中&#xff0c;我们常常需要在不同的数据结构之间进行转换&#xff0c;以满足特定库或框架的要求。本文将探讨如何将 std::vector<gp_Pnt> 转换为 QVector<QPointF>&#xff0c;并生成特定范围内的二维离散点。 生成二维离散点 我们首先需要生成一系列…

零基础学习Redis(12) -- Java连接redis服务器

在我们之前的内容中&#xff0c;我们会发现通过命令行操作redis是十分不科学的&#xff0c;所以redis官方提供了redis的应用层协议RESP&#xff0c;更具这个协议可以实现一个和redis服务器通信的客户端程序&#xff0c;来简化和完善redis的使用。现阶段有很多封装了RESP协议的库…

clangd LSP 不能找到项目中的文件

clangd LSP 不能找到项目中的文件 clangd LSP 不能找到项目中的文件 clangd LSP 不能找到项目中的文件 Normally you need to create compile_commands.json。 如果你使用 cmake 作为构建工具&#xff0c;请执行下面的命令&#xff1a; cmake -DCMAKE_EXPORT_COMPILE_COMMAN…

【内存】Linux 内核优化实战 - vm.overcommit_memory

目录 vm.overcommit_memory 解释一、概念与作用二、参数取值与含义三、相关参数与配置方式四、实际应用场景建议五、注意事项 vm.overcommit_memory 解释 一、概念与作用 vm.overcommit_memory 是 Linux 内核中的一个参数&#xff0c;用于控制内存分配的“过度承诺”&#xf…

Python:.py文件转换为双击可执行的Windows程序(版本2)

流程步骤&#xff1a; 这个流程图展示了将 Python .py 文件转换为 Windows 可执行程序的完整过程&#xff0c;主要包括以下步骤&#xff1a; 1、准备 Python文件&#xff0c;确保代码可独立运行 2、安装打包工具&#xff08;如 PyInstaller&#xff09; 3、打开命令提示符并定位…

【请关注】mysql一些经常用到的高级SQL

经常去重复数据&#xff0c;数据需要转等操作&#xff0c;汇总高级SQL MySQL操作 一、数据去重&#xff08;Data Deduplication&#xff09; 去重常用于清除重复记录&#xff0c;保留唯一数据。 1. 使用DISTINCT关键字去重单列 -- 从用户表中获取唯一的邮箱地址 SELECT DISTIN…

RA4M2开发涂鸦模块CBU(2)----配置按键开启LED

RA4M2开发涂鸦模块CBU.2--配置按键开启LED 概述视频教学样品申请硬件准备参考程序按键口配置中断回调函数主程序 概述 本实验演示如何在 Renesas RA4M2 单片机上使用 GPIO 输入&#xff08;按键&#xff09; 触发 GPIO 输出&#xff08;LED&#xff09;&#xff0c;并使用e2st…

Linux——Json

一 概念 json是一种轻量级&#xff0c;基于文本的&#xff0c;可读的数据交换格式&#xff0c;能够让数据在不同系统&#xff08;比如前端—后端&#xff0c;服务器—客户端&#xff09;间方便传递/存储。在编程语言中都内置了处理json数据的方法 二 语法规则 1. 数据格式&a…

大模型之微调篇——指令微调数据集准备

写在前面 高质量数据的准备是微调大模型的重中之重&#xff0c;一些高质量的数据集可能远比模型性能更佳重要。 我是根据自己的数据照着B站up code花园LLaMA Factory 微调教程&#xff1a;如何构建高质量数据集&#xff1f;_哔哩哔哩_bilibili做的。 数据集格式 在LLaMA Fa…

LVS—DR模式

LVS—DR模式 LVS DR 模式详细简介 一、模式定义与核心原理 LVS DR&#xff08;Direct Routing&#xff09;模式&#xff0c;即直接路由模式&#xff0c;是 Linux Virtual Server&#xff08;LVS&#xff09;实现负载均衡的经典模式之一&#xff0c;工作于网络四层&#xff0…

宝玉分享VibeCoding构建Agent

借助 Claude Code 完成的一个翻译智能体 (Translator Agent)。你只需输入一段文字、一个网址或一个本地文件路径&#xff0c;它就能自动提取内容并完成翻译。更酷的是&#xff0c;它还能修正原文中的拼写错误&#xff0c;确保译文的准确流畅。 到底什么是“真正的”AI Agent&a…