LUA: попытка удалить значение из таблицы, когда оно найдено в другой таблице - PullRequest
0 голосов
/ 04 февраля 2019

Я пытаюсь удалить ключ и значение из таблицы, когда она найдена в другой таблице.Я использовал это до сих пор, но хотя он распознает дубликат, он всегда удаляет последний элемент в таблице ...

function get_key_for_value( t, value )
 for k,v in pairs(t) do
 if v==value then return k
 end
 return nil
 end
 end

 for k,v in pairs (Iranian_Protected_Groups) do
 v[6] = 0
 if Springfield_3_Target_Name == v[2] then
 v[6] = v[6] + 1
 if v[6] > 0 then
 local Key_To_Remove = get_key_for_value (Iranian_Protected_Groups, v)
 MESSAGE:New( "Shared target is "..v[2], 40):ToBlue()
 table.remove (Iranian_Protected_Groups, Key_To_Remove)
 end
 end
 end

любая помощь будет оценена!

1 Ответ

0 голосов
/ 04 февраля 2019

Во-первых, вы должны отформатировать код с использованием стандартного отступа, чтобы было легче разобрать, как человек читает код:

function get_key_for_value(t, value)
    for k, v in pairs(t) do
        if v == value then
            return k
        end
        return nil
    end
end

Внимательно посмотрите на цикл for.Вы никогда не пройдете первую итерацию, потому что каждая итерация return с.

Ваша функция будет зафиксирована, если вы переместите return nil оператор вне цикла.(Хотя для большинства целей это избыточно, потому что, как правило, никакое значение не эквивалентно возвращению nil).

Ранее Key_To_Remove было nil.При передаче nil в качестве индекса для удаления в table.remove Lua удаляет последний элемент.Это удобно при работе со списком как со стеком, но в этом случае для вас скрыта ошибка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...