2017-08-24 49 views
1

我有一个黑名单像"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 

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

我的程序会为每个请求处理多个(元素,黑名单)对,对于每一对我建立一个集合,只使用一次。

我认为效率不高,并试图使用string.match,但lua中的模式不是标准的RegEx,我没有在黑名单的开始/中间/结尾同时编写可匹配元素的模式。

  • 请问string.match比建立一套更有效率吗?
  • 如何编写适当的图案?
  • 有什么办法更有效率?
+2

'元素的理解= “789”; if(“12,3,4,5,6,789”):find(“%f [%d]”.. element ..“%f [%D]”)然后print(“Access Denied”)end' –

+0

很酷,我想接受这个。 @Egor Skriptunoff – QuentinLewes

回答

2

模式匹配是最容易在没有极端案例:

string.match(","..blacklist..",", 
      ","..element..",") 
0

简短的解决方案:

local blacklist = "31,415,9265,3589,7932,3846,2643,383,279" 
local item = "383" 
blacklist= ","..blacklist.."," 
if blacklist:find(","..item..",") then 
    print("found in the blacklist") 
end 

PS:这是我原来的任务

+0

您的真相,有很多隐患 –

+0

我改正了答案 –

+0

尝试将项目等于1 ...确保您的解决方案适用于列表,例如“31,415,9265,3589,7932,3846,2643,383,279'与诸如3,41,15,92,65等物品相关的问题。 – lhf

相关问题