Lua table.remove 的一个问题记录
2014-01-24 12:32
495 查看
例如,表1中存放一组数据,表2存放一组下标,表2中的数据是随机点取添加,
需要根据表2中的下标来删除对应的表1中的数据,
此时如果直接根据表2中的下标来删除表1中的数据则会删除错误,
没有删除对应的数据,这时我们只要对需删除的表进行倒序排序,从后向前删除即可。
t1 = {
{...}
{...}
{...}
{...}
{...}
}
t2 = {2,1,4}
此时如果for循环删除t1中的数据,首先因为非泛型for循环在循环开始时就已经确定了这个循环的执行次数,
如果在运行的过程中remove了一个值,那么下次就必然会漏过一个。
此时你希望的运行是这样的:
访问第1个元素,
访问2,->删除第2个
访问3,
访问4,
访问5
但实际运行是这样的:
访问1,
访问2,->删除2
访问4,
访问超出范围的5,
所以此时如果倒序删除的话就不会造成这种问题。
local sortfunc = function(a, b) return a > b end
table.sort(t2, sortfunc)
将t2进行排序后,再循环删除t1.
需要根据表2中的下标来删除对应的表1中的数据,
此时如果直接根据表2中的下标来删除表1中的数据则会删除错误,
没有删除对应的数据,这时我们只要对需删除的表进行倒序排序,从后向前删除即可。
t1 = {
{...}
{...}
{...}
{...}
{...}
}
t2 = {2,1,4}
此时如果for循环删除t1中的数据,首先因为非泛型for循环在循环开始时就已经确定了这个循环的执行次数,
如果在运行的过程中remove了一个值,那么下次就必然会漏过一个。
此时你希望的运行是这样的:
访问第1个元素,
访问2,->删除第2个
访问3,
访问4,
访问5
但实际运行是这样的:
访问1,
访问2,->删除2
访问4,
访问超出范围的5,
所以此时如果倒序删除的话就不会造成这种问题。
local sortfunc = function(a, b) return a > b end
table.sort(t2, sortfunc)
将t2进行排序后,再循环删除t1.
相关文章推荐
- 记录lua的table转string一个问题
- 记录一个问题 lua_tinker中load_file 的lua文件包含require报错解决办法
- 关于lua table实现的一个问题
- lua table remove元素的问题
- Lua、table表的遍历过程中删除remove元素会出现的问题及解决
- ttable delete删除记录的问题
- 这里和大家分享一下SqlServer 分区遇到的问题 How to Remove (Undo) Table Partitioning
- lua中类的属性是table时,多个类的实例使用了同一个table属性
- 随手记录一个 firefox的backgroundPostion-x和-y的问题
- SSAS实践问题记录--后端数据库访问模块中存在错误。 为绑定指定的大小太小,导致一个或多个列值被截断。
- 学习Discuz! X3.2记录:一个小提示,可以知道插件php文件语法出问题了
- lua的table长度问题
- html页面中关于一个table表格中设置上下2个td宽度一致的问题
- html动态创建table不成功的一个问题
- 记录webp设置混合(setBlendFunc)出现的一个问题
- optimize table的一个小问题
- 记录一个无处诉苦的页面顶部有空白问题
- dba_free_space中同一个file_id存在多条记录的问题
- 在虚拟机的XP中使用管道出现的问题,可能是一个BUG,先记录下来
- Kafka:ZK+Kafka+Spark Streaming集群环境搭建(二十五)Structured Streaming:同一个topic中包含一组数据的多个部分,按照key它们拼接为一条记录(以及遇到的问题)。