故事背景,两只宠物育种的时候要从背包删除,放入育种栏。育种完成再放回背包。现在育种完成背包多了一只。调试发现是删除的时候少删除了一只。
Lua
if source_list_a == take_list then
table.remove(take_list, index_a)
else
table.remove(ware_list, index_a)
end
if source_list_b == take_list then
table.remove(take_list, index_b)
else
table.remove(ware_list, index_b)
end
如果a在b的前面,那么b remove会失败,remove后b的index_b其实已经改变了.
其实这个bug是ai写的,下面的代码也是ai改的
Lua
-- 先移除索引较大的宠物,再移除索引较小的,避免索引变化问题
local remove_indices = {}
if source_list_a == take_list then
table.insert(remove_indices, {list = take_list, index = index_a})
else
table.insert(remove_indices, {list = ware_list, index = index_a})
end
if source_list_b == take_list then
table.insert(remove_indices, {list = take_list, index = index_b})
else
table.insert(remove_indices, {list = ware_list, index = index_b})
end
-- 按索引从大到小排序,先移除索引大的
table.sort(remove_indices, function(a, b)
return a.index > b.index
end)
-- 按排序后的顺序移除
for _, remove_info in ipairs(remove_indices) do
table.remove(remove_info.list, remove_info.index)
end