Lua:对k,v成对(tbl)循环进行算术运算

时间:2011-11-26 06:49:24

标签: math for-loop lua lua-table

我有一张如下表:

mafiadb:{"Etzli":{"alive":50,"mafia":60,"vigilante":3,"doctor":4,"citizen":78,"police":40},"Charneus":{"alive":29,"mafia":42,"vigilante":6,"doctor":14,"citizen":53,"police":33}}

有更多嵌套表,但我现在只想保持简单。

我运行以下代码来提取某些值(我正在根据这些值创建一个有序列表):

sortmaf={}
for k,v in pairs(mafiadb) do
sortmaf[k]=v["mafia"]
end

这是我运行的代码之一。我遇到的问题是,你似乎无法在表循环中进行算术运算。我试过了:

sortpct={}
for k,v in pairs(mafiadb) do
sortpct[k]=(v["alive"]*100)/(v["mafia"]+v["vigilante"]+v["doctor"]+v["citizen"]+v["police"])
end

它返回我正在尝试对“活着”字段进行算术运算。我在这里错过了什么?像往常一样,我很感谢回答这个问题时的任何考虑!

编辑: 我不打算对评论发表评论,而是在这里添加更多信息。

我发布的mafiadb数据库是真正的数据库。它只是剥离了两名球员,而不是我在其中列出的当前150多名球员。它的结构简单如下:

mafiadb = {
            Playername = {
                           alive = 0
                           mafia = 0
                           vigilante = 0
                           doctor = 0
                           police = 0
                           citizen = 0
                          }
           }

再添加几百个播放器名称,就可以了。

对于错误消息,确切的消息是:

  

尝试对字段'alive'执行算术运算(nil值)

所以...我不确定问题是什么。在我的第一个代码中,使用sortmaf的代码,它运行得很好,但突然间,当我尝试算术时,它无法找到v [“alive”]作为值?如果我只是将v [“alive”]单独放置,它会突然被发现并且不再是nil。我希望这可以澄清一点。

1 个答案:

答案 0 :(得分:3)

这看起来像是一个简单的错字。

你的150个角色中的一些人写得不好 - 可能他们没有#34;活着"财产,或者它写得不正确,或者它不是数字。试试这个:

for k,v in pairs(mafiadb) do
  if type(v.alive) ~= 'number' then
    print(k, "doesn't have a correct alive property")
  end
end

这应该打印"坏"的名字。字符。