问题描述:有一份字典型数据,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