最佳方法来保存表格中已完成的进度?

所以,我有一个空表格。

local data_tbl = {}

但是我需要在用户完成当前任务时保存数据。 比如:

-- (1, 2, 21) 是任务编号。
data_tbl['1'] = true
data_tbl['2'] = true
data_tbl['21'] = true

并且在表格“data_tbl”中看起来像这样

data_tbl {
1 = true,
2 = true,
21 = true,
}

我只想保存已完成的任务。而不是全部,因为它很沉重? 但是当我想要删除这个键,比如 21,就没有任何效果。

table.remove(data_tbl, 21)

索引为 21 的任务没有被删除。为什么? 也许有其他更好的方法来完成这个任务?(保存已完成的任务)

我不想使用table.Add(),因为它会添加到最后位置。像 table.Add(data_tbl, {completed_id = 21}) 并且在表格中看起来像这样。

data_tbl {
1 = {completed_id = 21}
}
--这会让我有更多的表格检查和循环,我不想有这些。
点赞
用户4984564
用户4984564

table.inserttable.remove 是为序列设计的,但您正在将表用作映射。 如果您有一个键,比如说 21 并想要删除它,只需执行 data_tbl[21] = nil

2020-02-27 10:32:43
用户12918181
用户12918181

Lua 的表是哈希表。要向表中插入数据,可以使用 mytable[name] = valuemytable.myname = value。要从表中删除数据,可以使用 mytable[name] = nilmytable.myname = nil

为了模拟数组,Lua 表具有在模块 table 中的辅助函数和某些优化,但 id 必须是数字,并且从 1 开始。

对于混合表(例如 mytable[1] = true; mytable[2] = true; mytable[3] = true; mytable[21] = true; mytable.name = 'values'),#mytable 的值为 3,因为条目 [21] 和 'name' 不构成序列。

table.removetable.insert 修改 'array' 并移动相应元素:

local mytable = {1, 2, 3, 4}

table.remove(mytable, 2)
print(table.concat(mytable, ',')) -- result is {1, 3, 4 }

table.insert(mytable, 2, 5)
print(table.concat(mytable, ',')) -- result is {1, 5, 3, 4 }

将数字字符串用作键不会在内部转换为数字(类似于 JavaScript),并且无法使用类似数组的方法:

local mytable = {}
mytable[21] = 'value21'
mytable['21'] = 'string21'

-- table content: {[21] = 'value21', ['21'] = 'string21'}
2020-02-27 10:36:53