路亚 | 仅限表参数的白名单

C0n*_*0nk 2 lua lua-table

我正在尝试创建一个允许 args 的白名单,以便从 args 表中删除表中不在我的白名单表中的任何提供的 args。

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

]]
Run Code Online (Sandbox Code Playgroud)

如何让我的代码根据白名单表检查 args 表,然后运行我的删除函数以从 args 表中删除垃圾 args。

Nif*_*fim 5

我建议改变你whitelist的允许更简单的检查。正如 Nicol Bolas 所指出的,这可以通过在运行时反转表来实现,以允许快速检查和易于维护。

反转whitelist表格用字符串索引的数字填充表格,允许检查 if 语句是来自 args 的值的简单索引。

然后,您可以遍历args列表并检查 arg 是否在whitelist. 如果它出现在whitelist将值添加到新列表中,我将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
Run Code Online (Sandbox Code Playgroud)