tolua中table.remove怎么删除表中符合条件的数据

tolua中table.remove怎么删除表中符合条件的数据

  • 介绍
  • 问题(错误方式删除数据)
  • 正确删除方案
    • 从后向前删除
    • 递归方式删除
    • 插入新表方式
  • 拓展一下
  • 总结

介绍

在lua中删除表中符合条件的数据其实很简单,但是有一个顺序问题,因为lua的表中的数据删除需要通过table.remove来删除,当你删除前一个后,索引值发生了变化。

问题(错误方式删除数据)

--测试lua表
local tab1 = {[1] = {Id = 101,value1 = 1,value2 = 2,value3 = 3,},[2] = {Id = 105,value1 = 1,value2 = 2,value3 = 3,},[3] = {Id = 101,value1 = 1,value2 = 2,value3 = 3,},[4] = {Id = 108,value1 = 1,value2 = 2,value3 = 3,},[5] = {Id = 101,value1 = 1,value2 = 2,value3 = 3,},}--错误方式一for k, v in pairs(tab1) doif(v.Id == 101) thentable.remove(table,k)endend--与上面删除方式相同(换了个写法)for i = 1, #tab1 doif(tab1[i].Id == 101) thentable.remove(table,i)endend--错误方式二local index = 1for i = 1, #tab1 doif(tab1[i].Id == 101) thentable.remove(table,index)index = index - 1endindex = index + 1end

上面这两种方式都是错误的,最终打印并不是实际想象中的打印

正确删除方案

从后向前删除

--测试数据的lua表local tab1 = {[1] = {Id = 101,value1 = 1,value2 = 2,value3 = 3,},[2] = {Id = 105,value1 = 1,value2 = 2,value3 = 3,},[3] = {Id = 101,value1 = 1,value2 = 2,value3 = 3,},[4] = {Id = 108,value1 = 1,value2 = 2,value3 = 3,},[5] = {Id = 101,value1 = 1,value2 = 2,value3 = 3,},}this.RemoveTabValue(tab1,101)for k, v in pairs(tab1) dologError("k ========>"..tostring(k))logError("v.Id ========>"..v.Id)endfunction this.RemoveTabValue(tab,Id)for i = #tab, 1 ,-1 doif tab[i].Id == Id thentable.remove(tab,i)endend
end

打印如下
在这里插入图片描述

递归方式删除

--测试数据的lua表local tab1 = {[1] = {Id = 101,value1 = 1,value2 = 2,value3 = 3,},[2] = {Id = 105,value1 = 1,value2 = 2,value3 = 3,},[3] = {Id = 101,value1 = 1,value2 = 2,value3 = 3,},[4] = {Id = 108,value1 = 1,value2 = 2,value3 = 3,},[5] = {Id = 101,value1 = 1,value2 = 2,value3 = 3,},}this.RemoveTabValue(tab1,101)for k, v in pairs(tab1) dologError("k ========>"..tostring(k))logError("v.Id ========>"..v.Id)end	--递归方法
function this.RemoveTabValue(tab,Id)for k, v in pairs(tab) doif v.Id == Id thentable.remove(tab,k)this.RemoveTabValue(tab,Id)breakendend
end

打印如下
在这里插入图片描述

插入新表方式

--测试数据的lua表local tab1 = {[1] = {Id = 101,value1 = 1,value2 = 2,value3 = 3,},[2] = {Id = 105,value1 = 1,value2 = 2,value3 = 3,},[3] = {Id = 101,value1 = 1,value2 = 2,value3 = 3,},[4] = {Id = 108,value1 = 1,value2 = 2,value3 = 3,},[5] = {Id = 101,value1 = 1,value2 = 2,value3 = 3,},}local newtab = {}for k, v in pairs(tab1) doif v.Id == 101 thentable.insert(newtab, v)endend--这里我没有写将tab1表删除的方法,等于还占有内存,所以相当于开辟了新内存空间--可以自己删除原tab1表的数据,或者使用上面两种方式--此方法占用额外内存空间for k, v in pairs(newtab) dologError("k ========>"..tostring(k))logError("v.Id ========>"..v.Id)end	

打印如下
在这里插入图片描述

拓展一下

这里知识简单说一下,如果是遇见下面这种字典类型的lua表

  1. #tab1长度结果是3不是5,剔除了[true]和[“a”]不算(不识别非数字为k的键值对)
  2. 只能用pairs的方式才能读取出所有键值对,如果用ipairs只能读取出[1][2][3]数字为k的键值对
local tab1 = {[1] = {Id = 101,value1 = 1,value2 = 2,value3 = 3,},[2] = {Id = 105,value1 = 1,value2 = 2,value3 = 3,},[3] = {Id = 101,value1 = 1,value2 = 2,value3 = 3,},[true] = {Id = 108,value1 = 1,value2 = 2,value3 = 3,},["a"] = {Id = 101,value1 = 1,value2 = 2,value3 = 3,},}

总结

如果文章对你有帮助可以留下免费的爱心和关注,感谢

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

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

相关文章

1.如何实现统一的API前缀-web组件篇

文章目录 1. 问题的由来2.实现原理3. 总结 1. 问题的由来 系统提供了 2 种类型的用户,分别满足对应的管理后台、用户 App 场景。 两种场景的前缀不同,分别为/admin-api/和/app-api/,都写在一个controller里面,显然比较混乱。分开…

Mgeo:multi-modalgeographic language model pre-training

文章目录 question5.1 Geographic Encoder5.1.1 Encoding5.1.2 5.2 multi-modal pre-training 7 conclusionGeo-Encoder: A Chunk-Argument Bi-Encoder Framework for Chinese Geographic Re-Rankingabs ERNIE-GeoL: A Geography-and-Language Pre-trained Model and its Appli…

Gradle笔记 一 Gradle的安装与入门

文章目录 Gradle 入门Gradle 简介学习Gradle 的原因: 常见的项目构建工具Gradle 安装Gradle 安装说明安装JDK 下载并解压到指定目录配置环境变量检测是否安装成功 Gradle 项目目录结构Gradle 创建第一个项目Gradle 中的常用指令修改maven 下载源Wrapper 包装器使用教…

【C++】继承

本期我们来学习c中的继承 目录 一、啥是继承 二、继承的定义 1.1 定义格式 1.2 继承方式 三、基类和派生类对象赋值转换 四、继承中的作用域 五、派生类的默认成员函数 5.1 派生类的构造函数和基类构造函数的关系 5.2 派生类的拷贝函数和基类拷贝函数的关系 5.3 派生…

Python算法例7 四数乘积

1. 问题描述 给定一个长度为n的数组a和一个正整数k,从数组中选择四个数,要求四个数的乘积小于等于k,求方案总数。 2. 问题示例 给定n5,a[1,1,1,2,2],k3,返…

小程序day02

目标 WXML模板语法 数据绑定 事件绑定 那麽問題來了,一次點擊會觸發兩個組件事件的話,該怎么阻止事件冒泡呢? 文本框和data的双向绑定 注意点: 只在标签里面用value“{{info}}”,只会是info到文本框的单向绑定,必须在…

【Linux】多路IO复用技术②——poll详解如何使用poll模型实现简易的一对多服务器(附图解与代码实现)

在阅读本篇博客之前,建议大家先去看一下我之前写的这篇博客,否则你很可能会一头雾水 【Linux】多路IO复用技术①——select详解&如何使用select模型在本地主机实现简易的一对多服务器(附图解与代码实现)http://t.csdnimg.cn/…

JavaEE平台技术——预备知识(Web、Sevlet、Tomcat)

JavaEE平台技术——预备知识(Web、Sevlet、Tomcat) 1. Web基础知识2. Servlet3. Tomcat并发原理 1. Web基础知识 🆒🆒上个CSDN我们讲的是JavaEE的这个渊源,实际上讲了两个小时的历史课,给大家梳理了一下&a…

为机器学习算法准备数据(Machine Learning 研习之八)

本文还是同样建立在前两篇的基础之上的! 属性组合实验 希望前面的部分能让您了解探索数据并获得洞察力的几种方法。您发现了一些数据怪癖,您可能希望在将数据提供给机器学习算法之前对其进行清理,并且发现了属性之间有趣的相关性&#xff0c…

Web自动化测试 —— PageObject设计模式!

一、page object 模式简介 1.1、传统 UI 自动化的问题 无法适应 UI 频繁变化无法清晰表达业务用例场景大量的样板代码 driver/find/click 二、page object 设计原则 2.1、POM 模式的优势 降低 UI 变化导致的测试用例脆弱性问题让用例清晰明朗,与具体实现无关 2.…

三、操作系统

(一)概述 操作系统是管理整个系统的软、硬件资源的系统,既是人和硬件之间的一种接口,也是应用软件与硬件之间的接口。 (二)进程管理 1.进程的状态 进程的状态是操作系统对进程进行管理的时候设置的几种状…

Gopro hero5运动相机格式化后恢复案例

Gopro运动相机以稳定著称,旗下的Hero系列销售全球。下面我们来看一个Hero5格式化后拍了少量素材的恢复案例。 故障存储:64G MicroSD卡 Exfat文件系统 故障现象: 64G的卡没备份数据时做了格式化操作又拍了一条,发现数据没有备份,客户自行使…

c语言经典算法—二分查找,冒泡,选择,插入,归并,快排,堆排

一、二分查找 1、前提条件&#xff1a;数据有序&#xff0c;随机访问&#xff1b; 2、实现&#xff1a;递归实现&#xff0c;非递归实现 3、注意事项&#xff1a; 循环退出条件:low <high,low high.说明还有一个元素&#xff0c;该元素还要与key进行比较 mid的取值&#xf…

C# list<T>去重

文章目录 C# list<T>去重值类型去重List<object>object is intobject is decimalobject is charobject is boolobject is string List<int>List<string> 引用类型去重 C# list去重 值类型去重 List object is int //object is intList<object&g…

Redis-命令操作Redis

&#x1f3ac; 艳艳耶✌️&#xff1a;个人主页 &#x1f525; 个人专栏 &#xff1a;《Spring与Mybatis集成整合》《Vue.js使用》 ⛺️ 越努力 &#xff0c;越幸运。 1.Redis简介 1.1.什么是Redis Redis是一个开源&#xff08;BSD许可&#xff09;&#xff0c;内存存储的数据…

unittest 通过TextTestRunner(buffer=True)打印断言失败case的输出内容

buffer是unittest.TextTestRunner的一个参数&#xff0c;它决定了测试运行时是否将输出结果缓存&#xff0c;并在测试完成后一次性打印。 当buffer设置为True时&#xff0c;测试运行期间的输出结果会被缓存起来&#xff0c;并在测试完成后一次性打印。这对于一些输出频繁的测试…

SPSS多因素方差分析

前言&#xff1a; 本专栏参考教材为《SPSS22.0从入门到精通》&#xff0c;由于软件版本原因&#xff0c;部分内容有所改变&#xff0c;为适应软件版本的变化&#xff0c;特此创作此专栏便于大家学习。本专栏使用软件为&#xff1a;SPSS25.0 本专栏所有的数据文件请点击此链接下…

MongoDB安装及开发系例全教程

一、系列文章目录 一、MongoDB安装教程—官方原版 二、MongoDB 使用教程(配置、管理、监控)_linux mongodb 监控 三、MongoDB 基于角色的访问控制 四、MongoDB用户管理 五、MongoDB基础知识详解 六、MongoDB—Indexs 七、MongoDB事务详解 八、MongoDB分片教程 九、Mo…

炸了!CVPR 2024投稿ID突破18000

点击下方卡片&#xff0c;关注“CVer”公众号 AI/CV重磅干货&#xff0c;第一时间送达 点击进入—>【计算机视觉和Transformer】交流群 扫码加入CVer知识星球&#xff0c;可以最快学习到最新顶会顶刊上的论文idea和CV从入门到精通资料&#xff0c;以及最前沿项目和应用&…

分析报告有样板了-奥威BI数据可视化报表模板

述职报告、月度数据分析报告、季度数据分析报告、区域数据分析报告……人在职场&#xff0c;数据分析报告少不了。那么&#xff0c;怎么才能在极短的时间内做出一张既好看又突出重点、分析逻辑在线的数据可视化分析报表&#xff1f;奥威BI软件的建议是采用BI数据可视化报表模板…