利用迭代器删除表中元素

例子:将test表中的偶数移除掉

local test = { 2, 3, 4, 8, 9, 100, 20, 13, 15, 7, 11}

for i, v in ipairs( test ) do

if v % 2 == 0 then

table.remove(test, i)

end

end

for i, v in ipairs( test ) do

print(i .. "====" .. v)

end

打印结果:

1====3

2====8

3====9

4====20

5====13

6====15

7====7

8====11

结果偶数8,20还存在。

因为迭代器每删除一个元素,然后的元素自动往前移动。

正确的删除方式:

方式一:从后面往前删除

tb={1,2,3,4,5,6,7,8,9,10,11,12,13,14}

for i=#tb,1,-1 do

if tb[i]%2==0 then

table.remove(tb,i)

end

end

方式二:while遍历

i=1

while i<=#tb do

if tb[i]%2==0 then

table.remove(tb,i)

else

i=i+1

end

end

原文地址:https://www.cnblogs.com/gd-luojialin/p/10962876.html

时间: 2024-11-10 16:55:02

利用迭代器删除表中元素的相关文章

顺序表之删除表中元素最小值

1 #include<stdio.h> 2 #define MAX 10//表的长度为10 3 typedef int ElementType; 4 int length=0; 5 int value,pos;//记录值和位置 6 typedef struct { 7 ElementType i; 8 int length; 9 ElementType data[MAX]; 10 }Sorder; 11 //主要删除最小值的函数代码 ,由此可见删除了最小值1,位于数组0的位置 12 bool

尾插法建表后递归算法删除表中元素

1 #include<stdio.h> 2 #include<stdlib.h> 3 typedef struct LNode{ 4 int data; 5 struct LNode *next; 6 7 }LNode,*Linklist; 8 //尾插法创建单链表 9 Linklist CreatList(Linklist &L){ 10 LNode *s,*r=L;//r为指向表尾的指针 11 int x; 12 //L=(Linklist)malloc(sizeof(

约瑟夫问题 算法很简单保证每隔人都能看懂用数组实现 利用循环删除数组中的元素

#include<iostream> using namespace std; const int size = 1000; void ArrDel() { int arr[size]; //循环结束标志,一直循环到数组中只剩下最后一个元素结束 int currentNum = size; int count = 0; for (int k = 0; k < size; k++) { arr[k] = k; } //currentNum==1表示数组中只剩下最后一个元素 是循环结束的标志

【ORACLE】删除表中重复数据

原因 在对数据库进行操作过程中我们可能会遇到这种情况,表中的数据可能重复出现,使我们对数据库的操作过程中带来读诸多不便,那么怎么删除这些重复没有用的数据呢? 平时工作中可能会遇到当试图对库表中的某一列或几列创建唯一索引时,系统提示 ORA-01452 :不能创建唯一索引,发现重复记录. 处理方法 重复的数据可能有这样两种情况: 第一种:删除表中所有重复的数据 第二种:只保留重复数据中最新记录的一条记录[工作中常用] 删除重复数据的想法 每一行数据所对应的rowid都是独一无二的,及时表中两个数据

删除表中数据的两种方法(delete删)

1.通过点击按钮来执行删除表中数据.(数据库和表的创建不在详细介绍,请自动阅读数据库和表的创建) 第一种方法:直接使用SQL来操作数据库,调用execSQL(sql)语句 public class MainActivity extends AppCompatActivity { private Button mDeleteButton; private MySqliteHelper mMySqliteHelper; private SQLiteDatabase db; @Override pro

查询和删除表中重复数据sql语句

  1.查询表中重复数据.select * from peoplewhere peopleId in (select   peopleId   from   people   group   by   peopleId   having   count(peopleId) > 1)2.删除表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断,只留有rowid最小的记录delete from people where peopleId   in (select   peopleId

如何删除表中的重复记录只保留其中一条?

1.查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断 select * from people where peopleId in (select  peopleId  from  people  group  by  peopleId  having  count(peopleId) > 1) 2.删除表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断,只留有rowid最小的记录 delete from people  where peopleId  

sql server 中删除表中数据truncate和delete的区别(转载自.net学习网)

我们都知道truncate table可以用来删除整个表的内容,它与delete后面不跟where条件的效果是一样.但除此之外,我们还清楚它们之间有其它的区别吗?本章我们将一起讨论truncate与delete区别. 我们先看一下truncate table的说明:删除表中的所有行,而不记录单个行删除操作.TRUNCATE TABLE在功能上与没有WHERE子句的DELETE语句相同:但是,TRUNCATE TABLE速度更快,使用的系统资源和事务日志资源更少. truncate table的语

SQL语句删除表中所有记录的方法

如何用一条sql语句删除表中的所有记录,这里分享下我的方法.参考链接: sql语句如何删除重复记录?四种方法 sql语句如何删除重复记录?教程详解 TRUNCATE TABLE删除表中的所有行,而不记录单个行删除操作. 语法TRUNCATE TABLE name 参数name 是要截断的表的名称或要删除其全部行的表的名称. 注释TRUNCATE TABLE 在功能上与不带 WHERE 子句的 DELETE 语句相同:二者均删除表中的全部行.但 TRUNCATE TABLE 比 DELETE 速度