LUA - 表中最常见的项目

swe*_*ngx 2 lua

我有一个如下表,我不需要知道哪种产品卖多少钱,我只想知道哪种产品最受欢迎。您知道哪种方法是执行此操作的最佳方法吗?就像下面的例子一样,知道因为“蓝色”产品已售出 3 个,所以它是最受欢迎的

local products = {}

products["430373bb5b7a40a04f9"] = "red"
products["0dce4263af4b5cfe0de"] = "red"
products["cf2559afb736c1eb1bc"] = "green"
products["abc4d248541c3386c88"] = "blue"
products["bb9386c65270948ebee"] = "blue"
products["b193fba741cd646a9c0"] = "blue"
Run Code Online (Sandbox Code Playgroud)

Mik*_* V. 6

此示例将计算单次传递中的销售数量。

local products = {}

products["430373bb5b7a40a04f9"] = "red"
products["0dce4263af4b5cfe0de"] = "red"
products["cf2559afb736c1eb1bc"] = "green"
products["abc4d248541c3386c88"] = "blue"
products["bb9386c65270948ebee"] = "blue"
products["b193fba741cd646a9c0"] = "blue"

local pop = {}

for k,v in pairs(products) do
   pop[v] = (pop[v] or 0) + 1
end

-- if you need to sort by sales then: 

local pop_s = {}
for k,v in pairs(pop) do
    pop_s[#pop_s+1] = { item=k, sales=v}
end
table.sort(pop_s, function (a,b)  return a.sales>b.sales end)
for k,v in pairs(pop_s) do
   print(v.item,v.sales)
end
Run Code Online (Sandbox Code Playgroud)

结果:

blue    3
red    2
green    1
Run Code Online (Sandbox Code Playgroud)