Lua实现将字典数据分成10份

问题描述:有一份字典型数据,key是物品ID,value是对应的数量,物品ID不多于10,所有物品的数量不少于10,现在需要把这些数据分为10份。


我的想法:先把不同种类的ID放进数组中,保证每种物品都可以入席,然后再一步步填充数据。


l_goods的格式:

{
["It6001"] = 5,
["It6002"] = 5,
["It6003"] = 2
}

或者

{
["It6001"] = 15,
["It6003"] = 2
}


function splitTenGoods(l_goods)
    local l_r = {}
    local l_k = {}  
    local i = 1
    for l_goodsId, l_num in pairs(l_goods) do
        for k = 1, l_num do
            table.insert(l_r, l_goodsId)
        end
        if l_k[i] == nil then
            l_k[i] = {}
            l_k[i].goodsId = l_goodsId
            i = i + 1
        end
    end

    for i,v in ipairs(l_k) do
        if v and v.goodsId then
            table.remove_ex(l_r, v.goodsId)
            v.nums = 1
        end
    end

    repeat
        local l_size = table.size(l_k)
        if l_size == 10 then break end

        local l_next = l_size + 1
        if l_k[l_next] == nil then
            l_k[l_next] = {}
            l_k[l_next].goodsId = l_r[1]
            l_k[l_next].nums = 1
            table.remove_ex(l_r, l_r[1])
        end

    until table.size(l_k) == 10    

    for _, l_goodsId in ipairs(l_r) do
        for i,v in ipairs(l_k) do
            if v.goodsId == l_goodsId then
                v.nums = v.nums + 1
                break
            end
        end
    end

    return l_k
end


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值