Loops 操作Lua表时遇到问题

Loops 操作Lua表时遇到问题,loops,lua,logic,lua-table,Loops,Lua,Logic,Lua Table,假设我有两张桌子: veggie_multiples = { {veggie = "carrot", quantity = 1}, {veggie = "tomato", quantity = 2}, {veggie = "celery", quantity = 3}} veggie_singles = { {veggie = "celery"}, {veggie = "carrot"}, {veggie = "potato"}, {veggie = "carrot"}, {veggie =

假设我有两张桌子:

veggie_multiples = {
{veggie = "carrot", quantity = 1},
{veggie = "tomato", quantity = 2},
{veggie = "celery", quantity = 3}}

veggie_singles = {
{veggie = "celery"},
{veggie = "carrot"},
{veggie = "potato"},
{veggie = "carrot"},
{veggie = "potato"}}
最后,我想用一个表来表示:

veggie_multiples = {
{veggie = "carrot", quantity = 3},
{veggie = "tomato", quantity = 2},
{veggie = "celery", quantity = 4},
{veggie = "potato", quantity = 2}}
我试过这样的方法:

veggie_multiples = {
{veggie = "carrot", quantity = 1},
{veggie = "tomato", quantity = 2},
{veggie = "celery", quantity = 3}}

veggie_singles = {
{veggie = "celery"},
{veggie = "carrot"},
{veggie = "potato"},
{veggie = "carrot"},
{veggie = "potato"}}

for i, n in ipairs(veggie_singles) do
    for ii, nn in ipairs(veggie_multiples) do
        if veggie_singles[i].veggie == veggie_multiples[ii].veggie then
            veggie_multiples[ii].quantity = veggie_multiples[ii].quantity + 1
            table.remove(veggie_singles, i)
        else
            table.insert(veggie_multiples, {veggie = veggie_singles[i], quantity = 1})
            table.remove(veggie_singles, i)
        end
    end
end

for i, n in ipairs(veggie_multiples) do
    print(veggie_multiples[i].veggie, " ", veggie_multiples[i].quantity)
end
不管我怎么努力,我都不能让它工作。请帮忙!谢谢。

这项功能:

for i, n in ipairs(veggie_singles) do
    local existed = false
    for ii, nn in ipairs(veggie_multiples) do
        if veggie_singles[i].veggie == veggie_multiples[ii].veggie then
            veggie_multiples[ii].quantity = veggie_multiples[ii].quantity + 1
            existed = true
            break
        end
    end
    if not existed then
        table.insert(veggie_multiples, {veggie = veggie_singles[i].veggie, quantity = 1})
    end
end

只有当
veggie_singles[i].veggie
中的项目不等于
veggie_中的all项目的倍数时,才会插入一个新项目。这就是标志existed所做的。

使用ipairs的for循环迭代索引和值so
对于ipairs中的i,n(素食者单身)
将在第一次迭代中给出
i=1和n={veggie=“芹菜”}
,依此类推。代码不需要使用
i
,因此在Lua中,您可以使用uu作为一次性使用。然后在veggie multiples中搜索一个与一个veggie single同名的条目。如果找不到则添加,如果找到则增加数量

for _, vs in pairs(veggie_singles) do
    local found = false
    for _, vm in pairs(veggie_multiples) do
       if vm.veggie == vs.veggie then
          vm.quantity = vm.quantity + 1
          found = true
          break
       end
    end
    if not found then
        table.insert(veggie_multiples, {veggie=vs.veggie, quantity=1}) 
    end
end


for i, n in ipairs(veggie_multiples) do
    print(veggie_multiples[i].veggie, " ", veggie_multiples[i].quantity)
end
由于索引对于这个问题不是很有用,取而代之的是名称,您可以使用名称作为表中的键来简化代码

quantity = {carrot=1, tomato=2, celery=3}
add = {"celery", "carrot", "potato", "carrot", "potato"}

for _, v in pairs(add) do
   quantity[v] = (quantity[v] or 0) + 1
end

for veggie, qty in pairs(quantity) do
   print(veggie, qty)
end
哪些产出:

potato  2
carrot  3
celery  4
tomato  2