Проблема с удалением элементов и обходом одновременно
Недавно я разрабатываю мобильную игру,и у меня есть проблема, когда я проектирую часть системы навыков.:
классный солдат:
{
список<мастерство&ГТ; навыки;
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;}
}
Это может сработать, но я думаю, что это недостаточно элегантно.Потому что контрольная власть в том случае, когда навыки удаляются, должна принадлежать самой себе.Если я это сделаю, контрольная власть будет принадлежать другому классу.Как я должен решить эту проблему?Должен ли я изменить шаблон дизайна?