【问题标题】:Lua: Functions with Tables for Beginners - Proper Naming/Retrieving of Tables within TablesLua:初学者的表函数 - 正确命名/检索表中的表
【发布时间】:2014-06-27 17:29:51
【问题描述】:

我在掌握函数和表格方面遇到了可怕的事情。我之前问过一个与此类似的问题,但仍然无法使其正常工作。因此,我将更具描述性。但就在我认为我理解它的时候,我又完全把自己弄糊涂了。这是我想要完成的任务:

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

输入被接收为NY345,de,M,9900

我创建了一个表格,其中包含特定输入可以开始的所有不同方式,例如:

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

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

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

感谢您的帮助!

【问题讨论】:

  • 在您的第一个 sn-p 中,我认为您的意思是 pairs(t) 而不是 pairs(seek)。 lua 的打印功能不会为您漂亮地打印表格。你需要自己走田野或买一台漂亮的桌子打印机。所以print(Brian) 只是要打印表标识符。此外,您的 person 函数想要迭代(使用 pairsname 表参数,而不是常量 t 表。
  • 请一次询问一个问题。您将更有可能获得每个问题的答案,并且对于未来的读者来说问题将更加清晰。
  • 问题 2 和 3 应该分开,它们本身并不清楚,并且与第一个问题完全不同。您必须澄清并举例说明。
  • 好的。我很抱歉,并将创建另一个更适合问题 2 和 3 的主题。谢谢大家。
  • @EtanReisner 你是对的。那是一个错字,我的意思是pairs(t)。谢谢你的收获。

标签: function lua lua-table


【解决方案1】:

我只会回答问题 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

【讨论】:

  • 感谢您的回复!关于你的回答,我确实有一个问题。 for i, tt in yourTable do,您能否解释一下该声明的内容以及 tt 的含义?我猜您正在迭代“对于表(t)中的每个表”?谢谢!
  • @Pwrcdr87 它应该是ipairs(yourTable)。是的,这会遍历yourTable 中的每个数组项,从 i=1 开始,直到 Lua 遇到第一个 nil 条目。您可以在 Lua 在线参考手册和 Programming in Lua (PIL) 中阅读更多关于 ipairs() 的信息(第 1 版在线免费,可以购买第 2 版或第 3 版)。
  • 感谢您的帮助。我买了这两本书并广泛阅读。但是我仍然无法理解如何迭代嵌套在其他表和函数中的表。此外,尝试了解如何在表中检索信息。但是你的回答对我有点帮助。我没有编程背景,所以我正在尽力而为。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-22
  • 2017-05-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多