0

次のようなテーブルがあります。

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

それは私が実行するコードの 1 つです。私が直面している問題は、テーブル ループで算術演算を実行できるように見えないことです。私は試した:

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人以上のプレーヤーではなく、2人のプレーヤーに簡素化されています. 次のように単純に構成されています。

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

さらに数百のプレイヤー名を追加すると、それができます。

エラーメッセージに関しては、正確なメッセージは次のとおりです。

フィールド 'alive' (nil 値) で演算を実行しようとしました

だから...私は何が問題なのか分かりません。私の最初のコードである sortmaf を使用したコードでは、完全に機能しますが、算術演算をしようとすると、値として v["alive"] が突然見つかりませんか? v["alive"] を単独で配置すると、突然見つかり、もはや nil ではなくなります。これでもう少し明確になることを願っています。

4

1 に答える 1

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

これにより、「悪い」キャラクターの名前が出力されます。

于 2011-11-27T02:10:24.370 に答える