Lua: Выполнение арифметики для k, v в парах (tbl) - PullRequest
0 голосов
/ 26 ноября 2011

У меня есть таблица, такая как:

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 ["alive"], он внезапно найдется и больше не будет нулевым. Надеюсь, это прояснит немного больше.

1 Ответ

3 голосов
/ 27 ноября 2011

Для меня это выглядит как простая опечатка.

Некоторые из ваших 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

Это должно напечатать имена «плохих» символов.

...