统计一句话里各单词的出现次数,先分词再双重循环比对计数——平方级成本;语料一大就卡。分词直接以单词为键累加计数表,一次遍历 O(n) 完成。错误场景:
local s = "攻沙 攻沙 守城 攻沙"
-- 双重循环:每个单词再遍历已收集单词比对
1000 个单词的双重循环要百万次比较——计数表把比较变成一次哈希查找。
分词直接以单词为键累加计数表。规范写法。示例代码如下:
local s = "攻沙 攻沙 守城 攻沙"
local freq = {}
for w in string.gmatch(s, "%S+") do
freq[w] = (freq[w] or 0) + 1
end
for w, c in pairs(freq) do
print(w, c)
end
输出 攻沙 3、守城 1——一次遍历完成全部词频统计。
三步验证:短句核对词频与手工一致;长文本(公告全文)统计验证性能无感;验证空串输入 freq 为空表不报错。
词频表配排序输出就是热词榜。示例代码如下:
local words = {}
for w, c in pairs(freq) do
words[#words + 1] = { w = w, c = c }
end
table.sort(words, function(a, b) return a.c > b.c end)
print(words[1].w, words[1].c)
输出 攻沙 3——按计数降序取榜首,聊天热词与搜索热词同一套管线。
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
【语法】 一、隐蔽陷阱 对比两份任务记录的"共同路线":要求连续的子串可以逐位比对,允许跳过中间步骤的最长公共子序列却没法直…
【游戏】 一、业务场景 新玩家出门就挨打,图文教学没人看,第二天流失率居高不下。训练营上线:三个分阶关卡(走位、连招、节奏)…
【语法】 一、隐蔽陷阱 五只猴子分桃,每来一只把桃分成 5 份多 1 个扔掉再拿走一份。正向从 1 个桃开始试,试到几千个才…
【游戏】 一、业务场景 满级玩家装备毕业后一周流失,进度条走到头没了盼头。渡劫玩法上线:80 级可挑战三重天劫,全通获得渡劫…
【语法】 一、隐蔽陷阱 63 分找零用面额 1、5、10、25 的硬币,贪心取最大面额 6 枚搞定;可换成面额 1、3、4 …
【游戏】 一、业务场景 会长每天手动发福利、清名单、盯报名,帮务占满游戏时间,连着三周漏发福利被帮众催。帮会管家上线:每周 …