HeShiYong Ответов: 1

Проблема с удалением элементов и обходом одновременно


Недавно я разрабатываю мобильную игру,и у меня есть проблема, когда я проектирую часть системы навыков.:
классный солдат:
{
список<мастерство&ГТ; навыки;
RemoveSkill (skill){ skills. remove(skill) }
OnNewTurn () {для навыка в навыках: навык.OnNewTurn()}
}

класс мастерства
{
оборот = 1;
собственник;
OnNewTurn()
{
--очередь;
if (turn <= 0)
{ ownerSoldier.Удалить (self);
удалить себя;
}
}
как вы можете видеть, когда игрок получает новый ход, возможно, навык должен быть удален из списка в солдате, но список проходит обход, чтобы удалить навык, сделает итератор обхода недействительным. Я использую python,но я хочу обсудить этот вопрос без определенного языка.на самом деле у меня обычно есть эта проблема....извините за мой плохой английский, Я китаец.Помогите мне, пожалуйста, Спасибо, ребята :)

Что я уже пробовал:

У меня есть решение этой проблемы:

классный солдат:
{
список<мастерство&ГТ; навыки;
RemoveSkill (skill){ skills. remove(skill); }
OnNewTurn () {для навыка в навыках: навык.OnNewTurn();
навыки.удалить(умение лямбда:вернуть навык.IsInvalid());
}
}

класс мастерства
{
...
IsInvalid () {return turn <= 0;}
}

Это может сработать, но я думаю, что это недостаточно элегантно.Потому что контрольная власть в том случае, когда навыки удаляются, должна принадлежать самой себе.Если я это сделаю, контрольная власть будет принадлежать другому классу.Как я должен решить эту проблему?Должен ли я изменить шаблон дизайна?

1 Ответов

Рейтинг:
1

Richard MacCutchan

Вы должны повторить копию списка при удалении элементов; см. 5. структуры данных-документация Python 3.4.5[^].