Lua 在表中保存已完成进度的最佳方法?

Lua 在表中保存已完成进度的最佳方法?,lua,Lua,所以,我有空桌子 local data_tbl = {} 但我需要在用户完成当前任务时保存数据。 比如: 在表数据中 data_tbl { 1 = true, 2 = true, 21 = true, } 我不想只保存已完成的任务。不是全部,因为它很重? 但是当我想取下这把钥匙的时候,比如21号,我什么也没得到 table.remove(data_tbl, 21) 未删除索引为21的任务。为什么? 也许有其他最好的方法来解决这一切?保存完成的任务 我不想使用table.Add,因为它已添加

所以,我有空桌子

local data_tbl = {}
但我需要在用户完成当前任务时保存数据。 比如:

在表数据中

data_tbl {
1 = true,
2 = true,
21 = true,
}
我不想只保存已完成的任务。不是全部,因为它很重? 但是当我想取下这把钥匙的时候,比如21号,我什么也没得到

table.remove(data_tbl, 21)
未删除索引为21的任务。为什么? 也许有其他最好的方法来解决这一切?保存完成的任务

我不想使用table.Add,因为它已添加到最后一个位置。与table.Adddata_tbl类似,{completed_id=21} 在桌子上看起来像

data_tbl {
1 = {completed_id = 21}
}
-- It's get me more table checks... and cycles , i don't want.

table.insert和table.remove用于序列,但您将该表用作映射。如果您有一个键,比如说21,并且想要取消设置它,只需执行data_tbl[21]=nil

table.insert和table.remove是用于序列的,但您将该表用作映射。如果您有一个键,比如说21,并且想要取消设置它,只需执行data_tbl[21]=nil

lua表是哈希表,要向表中插入数据,请使用mytable[name]=value或mytable.myname=value,从表中删除mytable[name]=nil或mytable.myname=nil

为了模拟数组,lua表在模块表中有辅助函数和某种优化,但id必须是数字,并且以1开头

对于混合表,如mytable[1]=true;mytable[2]=true;mytable[3]=真;mytable[21]=真;mytable.name='values',mytable的计算长度为3,因为条目[21]和'name'不构成序列

table.remove和table.insert修改“数组”并移动相应的元素:

本地mytable={1,2,3,4} table.removemytable,2 printtable.concatmytable,','-结果为{1,3,4} 表1.insertmytable,2,5 printtable.concatmytable,','-结果为{1,5,3,4} 作为键的数字字符串不会像javascript中那样在内部转换为数字,也不会与类似数组的方法一起使用:

本地mytable={} mytable[21]=“value21” mytable['21']='string21' -表内容:{[21]='value21',['21']='string21'}
lua表是哈希表,若要向表中插入数据,请使用mytable[name]=value或mytable.myname=value,若要从表中删除mytable[name]=nil或mytable.myname=nil

为了模拟数组,lua表在模块表中有辅助函数和某种优化,但id必须是数字,并且以1开头

对于混合表,如mytable[1]=true;mytable[2]=true;mytable[3]=真;mytable[21]=真;mytable.name='values',mytable的计算长度为3,因为条目[21]和'name'不构成序列

table.remove和table.insert修改“数组”并移动相应的元素:

本地mytable={1,2,3,4} table.removemytable,2 printtable.concatmytable,','-结果为{1,3,4} 表1.insertmytable,2,5 printtable.concatmytable,','-结果为{1,5,3,4} 作为键的数字字符串不会像javascript中那样在内部转换为数字,也不会与类似数组的方法一起使用:

本地mytable={} mytable[21]=“value21” mytable['21']='string21' -表内容:{[21]='value21',['21']='string21'}
我认为还有其他一些代码可以防止您将21设置为false,并在需要时检查它是否为true?@Taazar我不希望在数据表中叠加false值。我只想拥有真实的价值,如果是假的,就什么都不要。足够公平。在这种情况下,如Darius和DarkWiiPlayer所说,将值设置为nil将实现您所寻找的。我认为还有其他一些代码可以防止您只将21设置为false,并在需要时检查它是否为true?@Taazar我不希望在数据表中叠加假值。我只想拥有真实的价值,如果是假的,就什么都不要。足够公平。在这种情况下,如Darius和DarkWiiPlayer所说,将值设置为nil将实现您所寻找的。我现在检查,test[1]=true,test[3]=true,在我使用table.remove test,3之后,它没有任何效果。为什么?毕竟,现在键是数字。模块表用于类似数组的表-列表从1开始,没有空格。您将表用作哈希表/命名表,因此必须在检查了test[3]=nilI、test[1]=true、test[3]=true的情况下删除,并且在我使用table.remove test、3之后,它没有任何效果。为什么?毕竟,现在键是数字。模块表用于类似数组的表-列表从1开始,没有空格。您将表用作哈希表/命名表,因此必须使用test[3]=nil进行删除
data_tbl {
1 = {completed_id = 21}
}
-- It's get me more table checks... and cycles , i don't want.