Луа |Белый список только аргументов таблицы - PullRequest
0 голосов
/ 05 февраля 2019

Я пытаюсь создать белый список разрешенных аргументов, чтобы все предоставленные в таблице аргументы, которых нет в моей таблице белых списков, были удалены из таблицы 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 eleminate and remove unwanted arguments from table
]]
--args[key] = nil --remove the arguement from the args table

print(args) --[[ Output i want based of my whitelist of allowed arguments only

catid
filter_mediaType

]]

Как мне проверить кодтаблицу args для моей таблицы белого списка, а затем запустите мою функцию удаления, чтобы удалить ненужные аргументы из таблицы args.

1 Ответ

0 голосов
/ 05 февраля 2019

Я предлагаю изменить ваш whitelist для упрощения проверки.это можно сделать, перевернув таблицу при запуске, чтобы обеспечить как быструю проверку, так и простоту сопровождения, как указал Никол Болас.

Инвертирование таблицы заполняет таблицу whitelist числами, проиндексированными строками, что позволяетпроверка того, что оператор if является просто индексом значения из аргументов.

Затем вы можете просмотреть список args и проверить, находится ли аргумент в 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
...