Lua |仅表参数白名单
我正在尝试创建一个允许的参数的白名单,以便从args表中删除表中未包含的所有提供的参数Lua |仅表参数白名单,lua,lua-table,Lua,Lua Table,我正在尝试创建一个允许的参数的白名单,以便从args表中删除表中未包含的所有提供的参数 local args = { "99", "lollypop", "tornado", "catid", "CATID", "filter_mediaType", "one", "10", } local args_whitelist = { &qu
local args = {
"99",
"lollypop",
"tornado",
"catid",
"CATID",
"filter_mediaType",
"one",
"10",
}
local args_whitelist = {
"beforeafter",
"catid",
"childforums",
"display",
"element_id",
"element_type",
"exactname",
"filter_mediaType",
"filter_order",
"filter_order_Dir",
"filter_search",
"filter_tag",
"format",
"id",
"Itemid",
"layout",
"limit",
"limitstart",
"messageid",
"more",
"option",
"order",
"ordering",
"quality",
"query",
"recently",
"recip",
"reply_id",
"return",
"searchdate",
"searchf",
"searchphrase",
"searchuser",
"searchword",
"sortby",
"start",
"task",
"tmpl",
"token",
"view",
"component",
"path",
"extension"
}
--[[
Do something here to eliminate and remove unwanted arguments from table
]]
--args[key] = nil --remove the argument from the args table
print(args) --[[ Output i want based of my whitelist of allowed arguments only
catid
filter_mediaType
]]
如何让我的代码对照我的白名单表检查args表,然后运行我的delete函数从args表中删除垃圾args。我建议更改您的
白名单
,以便进行更简单的检查。正如Nicol Bolas所指出的,这可以通过在运行时反转表格来实现,以允许快速检查和易于维护
local args = {
"99",
"lollypop",
"tornado",
"catid",
"CATID",
"filter_mediaType",
"one",
"10",
}
local args_whitelist = {
"beforeafter",
"catid",
"childforums",
"display",
"element_id",
"element_type",
"exactname",
"filter_mediaType",
"filter_order",
"filter_order_Dir",
"filter_search",
"filter_tag",
"format",
"id",
"Itemid",
"layout",
"limit",
"limitstart",
"messageid",
"more",
"option",
"order",
"ordering",
"quality",
"query",
"recently",
"recip",
"reply_id",
"return",
"searchdate",
"searchf",
"searchphrase",
"searchuser",
"searchword",
"sortby",
"start",
"task",
"tmpl",
"token",
"view",
"component",
"path",
"extension"
}
--[[
Do something here to eliminate and remove unwanted arguments from table
]]
--args[key] = nil --remove the argument from the args table
print(args) --[[ Output i want based of my whitelist of allowed arguments only
catid
filter_mediaType
]]
反转该表将使用字符串索引的数字填充白名单
表,从而允许检查if语句是否只是args中值的索引
然后,您可以在args
列表中循环,并检查arg是否在白名单上。
如果它出现在白名单上
将值添加到新列表中,我将在我的示例中使用approved
。检查所有args
后,您可以设置args=approved
,这将清除表中所有未批准的值
local args = {
"99",
"lollypop",
"tornado",
"catid",
"CATID",
"filter_mediaType",
"one",
"10",
"beforeafter",
}
local function invert_table(target)
local t = {}
for k,v in pairs(target) do
t[v] = k
end
return t
end
local args_whitelist = invert_table(args_whitelist)
local approved = {}
for _,v in pairs(args) do
if args_whitelist[v] then
approved[#approved + 1] = v
end
end
args = approved
诚然,这也是一个最小的性能成本,因为反转只会发生在设置上。我会在答案中加上这个。这是一个相当巧妙的技巧。我必须记住将来使用它。谢谢