Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

LUA - Most common item in the table

Tags:

lua

I have a table like below, I don't need to know which product sells how much, I just want to know which product is the most popular. Do you have any idea which method is the best way to do this? Like in the example below, knowing that because 3 of the product "blue" have been sold, it is the most popular

local products = {}

products["430373bb5b7a40a04f9"] = "red"
products["0dce4263af4b5cfe0de"] = "red"
products["cf2559afb736c1eb1bc"] = "green"
products["abc4d248541c3386c88"] = "blue"
products["bb9386c65270948ebee"] = "blue"
products["b193fba741cd646a9c0"] = "blue"
like image 327
sweetngx Avatar asked Mar 12 '26 08:03

sweetngx


1 Answers

this example will count the number of sales in a single pass.

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

result:

blue    3
red    2
green    1
like image 157
Mike V. Avatar answered Mar 15 '26 19:03

Mike V.



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!