Lua |仅 table 个参数的白名单

Lua | Whitelist of table arguments only

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

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

]]

我如何让我的代码根据我的白名单 table 检查参数 table 然后 运行 我的删除函数从参数 table 中删除垃圾参数.

我建议更改您的 whitelist 以便进行更简单的检查。正如 Nicol Bolas 所指出的,这可以通过在 运行 上反转 table 来实现,以实现快速检查和易于维护。

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

然后您可以遍历 args 列表并检查 arg 是否在 whitelist 上。 如果它出现在 whitelist 上,将值添加到新列表,我将在我的示例中使用 approved。检查所有 args 后,您然后设置 args = approved 这将清除 table 中任何未批准的值。

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