具有Valor Lua的表格值

我正在编写一个脚本,其中包含一个函数:

loot()

它返回以下内容:

{"3金币"}
{"3金币"}
{"nothing"}
{"6金币", "一把手斧"}
{"12金币", "一把手斧"}

我希望将该函数包含在表中,该表应读取“a”、“an”、“在单词前没有数字”的数量为1。

因此,表将读取并进行计数示例:

table = {"金币"=24"nothing"=1"手斧"=2}

这是我正在寻找的那种表,但目前我没有成功。如我之前所说,我的函数 loot() 返回这些消息,这些不是 loot 读取的唯一消息,但我想将它们的数量或“a”、“an”保存为数字值为1,以便如果它是“6金币”,将其除以6并在其属于消息“金币”时在表中增加它。我希望你理解我在这里的观点。

这样做的目的是显示表值,以便我可以执行:

table["金币"] = 24

或者

 table = {["item"]="count",}

因此,我可以请求密钥。我真的想要一个可以增加密钥的表,而不是常规表,但是我就是想不出该怎么做。

提前感谢

如果您可以解释清楚每个部分,我将不胜感激 :)

一些其他消息:

{"11金币", "一个皮头盔", "肉", "一把长矛", "一枚金币"}
{"一枚金币"}

顺便说一下,我用来完成这个任务的程序非常受限。我能用的所有内容都在 lua 手册5.1的链接下:http://www.lua.org/manual/5.1/manual.html

元表不是一个选项:/

原文链接 https://stackoverflow.com/questions/8460633

点赞
stackoverflow用户312586
stackoverflow用户312586

首先你需要一个从字符串中提取数字和物品名称的函数。以下函数可以读取类似“一件长矛”或“11件长矛”的字符串,并返回1、 “长矛”和11, “长矛”。

function parseAmountAndItem(str)
  assert(type(str) == "string", "Expected a string. Got a " .. type(str))
  -- 处理“无物品”情况
  if str == "nothing" then return nil end
  local item, amount

  -- 如果以“a/an”+空格开头,则返回1
  _, _, item = str: find("^an? (.+)$")
  if item then
    amount = 1
  else --应该以数字+空格+单数+s开头
    _, _, amount, item = str:find("^(%d%d?%d?%d?%d?) (.+)s$") -
    assert(amount and item,"Could not parse the string: "..str)
    amount = tonumber(amount)
  end
  return amount,item
end

然后需要累积这些值。这应该可以工作:

function accumulatedLoot()
  local result = {}
  local amount, item
  for _, row in ipairs(loot()) do
    for _, str in ipairs(row) do
      local amount, item = parseAmountAndItem(str)
      if item then
        result[item] = (result[item] or 0) + amount
      end
    end
  end

  返回结果
end

注意:

-我手写了所有内容,没有进行测试。它可能会有一些语法错误和/或错误。 -我假设你的所有物品的复数形式是单数形式+“s” 。实际的英语更加复杂。你可能需要存储一个不规则复数的表格,并将它与str进行比较,而不是像我在代码中所做的那样仅删除s 。

2011-12-11 00:42:32