如何找出Lua表中出现次数最多的产品?
找出Lua表中最受欢迎产品的最优方法
给定一个以订单ID为键、产品名称为值的Lua表,我们不需要知道每个产品的具体销量,只需要找出出现次数最多的产品(也就是最受欢迎的),最优的实现方式如下:
实现思路
核心逻辑是一次遍历完成统计+最大值跟踪,避免额外的二次遍历,时间复杂度为O(n)(n是表中元素的数量),这是理论上的最优复杂度——因为你必须遍历所有元素才能统计出每个产品的出现次数。
代码实现
local products = { ["430373bb5b7a40a04f9"] = "red", ["0dce4263af4b5cfe0de"] = "red", ["cf2559afb736c1eb1bc"] = "green", ["abc4d248541c3386c88"] = "blue", ["bb9386c65270948ebee"] = "blue", ["b193fba741cd646a9c0"] = "blue" } local count = {} local max_count = 0 local most_popular = nil -- 遍历原表,同时完成统计和最大值跟踪 for _, product in pairs(products) do -- 累加当前产品的计数,不存在则初始化为0再加1 count[product] = (count[product] or 0) + 1 -- 实时更新当前最受欢迎的产品 if count[product] > max_count then max_count = count[product] most_popular = product end end print("最受欢迎的产品:" .. most_popular) -- 输出 blue
补充说明
- 如果存在多个产品出现次数相同(比如两个产品都出现3次),上述代码会返回第一个达到最大次数的产品。如果需要收集所有并列最受欢迎的产品,可以在遍历统计完成后,再遍历
count表筛选出所有计数等于max_count的产品。 - 这个方法的空间复杂度是O(k),k是不同产品的数量,在产品种类不多的情况下非常高效。
内容的提问来源于stack exchange,提问作者sweetngx
相关产品推荐
相关产品推荐

