Lua:具有初学者表的函数 - 正确命名/检索表中的表

时间:2014-05-09 20:46:11

标签: function lua lua-table

我在抓住功能和表格时遇到了可怕的时间。我之前问过一个类似于此的问题,但仍然遇到问题,让它正常工作。所以我会更具描述性。但就在我认为我理解它的时候,我又完全迷惑了自己。以下是我要完成的任务:

我有一个程序从外部来源收到input。它需要采用input,并基本上“剖析”字符串以获取所需信息。根据收到的信息,它将进入下一阶段或运行以执行适当的操作。例如:

收到的输入为NY345,de,M,9900

我创建了一个表,它具有特定输入可以开始的所有不同方式,例如:

local t = {["NY"] = 5, ["MS"] = 7, ["HG"] = 10, ["JX"] = 14, ["UY"] = 20}

现在我想使用一个函数来接收输入并在k中查找t{}并使用它来收集其他变量......

function seek(input)
    for k, v in pairs (seek) do
        local info = string.match(input,k)
            if info then
                return {seekData = string.match(input,k..",(%d*),.*"), seekMult = seekData*v}
            end
    end
end

我离我有多远?

如果我上面有“t = {...}”表,那包含其他表格;如何命名“t = {...}”中的每个表并为其他方程检索它?如果[“a”] = 8,该表的其余部分是否可以使用?例如:

t={["a"] = 2, ["b"] = 3, ["c"] = "IOS"},{["a"] = 8, ["b"] = 9, ["c"] = "NVY"},{["a"] = 1, ["b"] = 5, ["c"] = "CWQ"}}

if a = 8, then b = 9 and c = "NVY"

我希望我的函数能够搜索k(每个表)并将其与输入进行比较。如果找到了,那么它会将其他两个局部变量设置为bc

感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

我只回答问题1,因为2和3应该是单独的问题。有很多方法可以根据你没有提到的细节来做到这一点,但假设你有一个像这样的表:

t={
    {["a"] = 2, ["b"] = 3, ["c"] = "IOS"},
    {["a"] = 8, ["b"] = 9, ["c"] = "NVY"},
    {["a"] = 1, ["b"] = 5, ["c"] = "CWQ"}
}

然后是一个函数,它使a键值查找并返回b和c:

function findItem(a, yourTable)
    for i,tt in ipairs(yourTable) do
         if tt.a == a then
              return i, tt.b, tt.c
         end
    end
end

有了这个,如果输入是k,那么

i, b, c = findItem(k, t)
if i == nil then
     print('could not find k')
else
     print('found k at index ' .. i) 
end

findItem当然可以返回找到的子表,也许你不需要索引:

function findItem(a, yourTable)
    for i,tt in ipairs(yourTable) do
         if tt.a == a then
              return tt
         end
    end
end