Lua:循环中的string.gsub模式滞后

亚历克斯·弗格

我有4个非常大的表,其中包括字符串,每个表都包含一千个项目。我需要做的是遍历每个表,并在表中的每个字符串的大字符串上添加gsub。

这可能解释了:

for index, str in pairs(firstTable) do
    text = text:gsub("%f[%a]"..str.."%f[%A]", "#"..str);
end
for index, str in pairs(secondTable) do
    text = text:gsub("%f[%a]"..str.."%f[%A]", "#"..str);
end
for index, str in pairs(thirdTable) do
    text = text:gsub("%f[%a]"..str.."%f[%A]", "#"..str);
end
for index, str in pairs(fourthTable) do
    text = text:gsub("%f[%a]"..str.."%f[%A]", "#"..str);
end

有没有办法我可以减轻压力呢?当前,当文本很大时,它会导致大量的延迟。谢谢。

mpeterv

您可以创建一个需要替换的所有字符串的查找表,然后在一个gsub调用中进行所有替换。缺点是,如果四个大表的内容发生更改,则需要更新查找表。这是创建查找表的方式:

local lookup = {}

for index, str in pairs(firstTable) do
    lookup[str] = "#" .. str
end

for index, str in pairs(secondTable) do
    lookup[str] = "#" .. str
end

for index, str in pairs(thirdTable) do
    lookup[str] = "#" .. str
end

for index, str in pairs(fourthTable) do
    lookup[str] = "#" .. str
end

这是替换的方式:

text = text:gsub("%f[%a]%a+%f[%A]", lookup)

这应该比您的解决方案快得多,因为它只扫描一次非常大的字符串一次,而不是4000次。极端情况所产生的结果与您的解决方案不同:

  • 我假设四个表中的字符串是唯一的;否则,如果一个字符串出现n多次,则n在您的情况下,该字符串将以井号开头,而在我的情况下仅以一个。

  • 我假设字符串本身不包含模式。

如果需要,可以解决这两个问题。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Lua string.gsub模式之间的文本

来自分类Dev

Lua string.gsub模式之间的文本

来自分类Dev

Lua:string.gsub模式允许多个模式替换

来自分类Dev

Lua:string.gsub模式,以允许多个模式替换

来自分类Dev

Libgdx:音轨循环中的滞后

来自分类Dev

为什么Lua的string.gsub不采用变量的替换模式?

来自分类Dev

Swift for循环中的模式匹配

来自分类Dev

在for循环中使用构建器模式

来自分类Dev

在PHP中的for循环中使用模式

来自分类Dev

在for循环中使用构建器模式

来自分类Dev

在循环中将模式与迭代器匹配

来自分类Dev

vuejs 2.0 循环中的 Bootstrap 模式

来自分类Dev

Lua用string.gsub普通搜索?

来自分类Dev

Lua string.gsub带连字符

来自分类Dev

匹配到“ ::”的模式不能与string.gsub一起使用

来自分类Dev

Lua string.gsub在string.gmatch中?

来自分类Dev

在游戏循环滞后

来自分类Dev

Pyscreenshot 循环滞后显示

来自分类Dev

在循环中选择具有相似模式的列名称

来自分类Dev

在for循环中重击任意glob模式(带空格)

来自分类Dev

Ant:在循环中使用多个名称模式进行删除

来自分类Dev

如何在我的循环中添加特定模式?

来自分类Dev

Obj-C,循环中的 NSTimer 计划,正确的模式?

来自分类Dev

在while循环中使用引导模式更改功能的jquery

来自分类Dev

防止在循环中打开对话框模式

来自分类Dev

Lua的string.find找不到模式

来自分类Dev

这个 R 语法是如何工作的?在 for 循环中通过 [apply() 和 match()] 选择性使用 gsub()

来自分类Dev

R中滞后的“循环”变量

来自分类Dev

gsub for循环未运行?