2011-11-26 67 views
0

我有一個表,如下所示:的Lua:在對於k做算術,V成對(TBL)循環

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 
          } 
      } 

添加幾百個玩家名稱,並且您擁有它。

至於錯誤消息,確切的消息是:

試圖在現場進行算術「活着」(零值)

所以......我不知道是什麼問題是。在我的第一個代碼中,有一個使用sortmaf的代碼,它可以很好地工作,但是突然間,當我嘗試進行算術時,它找不到v [「alive」]作爲值。如果我只將v [「活着」]本身,它突然發現,並不是零。我希望這個更清楚一點。

+1

除了附加的'''附近的'Charneus','mafiadb'和你發佈的代碼一起工作的很好。你當然可以在'for'循環中做所有事情(唯一的例外是從你正在迭代的表中添加或刪除元素)。循環代碼看起來很好,我猜你正在給它一些非數字數據。你應該發佈真正的'mafiadb'和確切的錯誤信息,以獲得更好的幫助 – sbk

回答

3

這看起來像是一個簡單的錯字給我。

你的150個字符中的一部分編寫得不好 - 可能它們沒有「活動」屬性,或者寫入不正確,或者它不是數字。試試這個:

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

這應該打印「壞」字符的名稱。

+0

親愛的主,我覺得這就像個白癡。我忘了,只有一個鍵沒有任何屬性,僅僅因爲它不需要。我在那個循環中做了一個if條件,現在它完美地工作......謝謝! – Josh

+0

歡迎您!另外,請注意,你可以做'v.alive'。它和v [「alive」]'一樣,它會爲你節省一些輸入。快樂黑客! – kikito