如何高效地检查一个元素是否在逗号分隔的字符串中?

我有一个黑名单,像这样 "12,3,4,5,6,789"

我试过

set = {}
for element in string.gmatch("12,3,4,5,6,789", "([^"..", ".."]+)") do
    set[element] = true
end

if set[...] then
    ...
end

去检查一个元素是否在黑名单中。

我的程序会处理多个 (元素,黑名单)对,对于每个对我都会构建一个 set,然后只使用一次。

我认为这很低效,所以尝试使用 string.match,但是在 lua 中的匹配模式不是标准的 RegEx,所以我无法编写一个正确匹配黑名单中间/开头/结尾元素的模式。

  • 使用 string.match 是否比构建一个 set 更高效?
  • 如何编写正确的匹配模式?
  • 是否有更高效的方法?
点赞
用户107090
用户107090

当没有边角情况时,模式匹配是最容易的:

string.match(","..blacklist..",",
             ","..element..",")
2017-08-24 18:01:58
用户7504558
用户7504558

短解决方案:

本地黑名单="31,415,9265,3589,7932,3846,2643,383,279"
local item ="383"
黑名单=","..黑名单..","
如果黑名单:find","..item..",")则
   打印(“在黑名单中找到”)
end

ps:这是我对原始任务的理解

2017-08-24 18:45:06