Я пытаюсь перевести следующий код на рубин:
public void discardWeapon(Weapon w){
if(!weapons.isEmpty()){
boolean discarded = false;
Iterator<WeaponType> it = weapons.iterator();
while(it.hasNext() && !discarded){
WeaponType wtaux = it.next();
if(wtaux == w.getWeaponType()){
it.remove();
discarded = true;
}
}
}
}
Но когда дело доходит до цикла while, я не могу найти практический способ сделать это в рубине. У меня есть следующая структура до сих пор:
def discardWeapon(w)
if(!@weapons.empty?)
discarded = false
@weapons.each do |wtaux|
end
end
end
Но как я могу проверить, выполняется ли мое условие при использовании итератора .each? Заранее спасибо.
1 ответ
Я не уверен, правильно ли я прочитал ваш Java-код, но мне кажется, что у вас есть переменная экземпляра @weapons
, которая содержит массив оружия, и вы хотите отбросить один экземпляр оружия w
из этот список.
def discard_weapon(weapon)
index = @weapons.index(weapon)
@weapons.delete_at(index) if index
end
Array#index
возвращает индекс первого матча. И Array#delete_at
удаляет элемент по индексу, когда был найден элемент.
Когда возможно, что одно и то же оружие включено в массив несколько раз, и вы хотите отбросить все совпадающие виды оружия, вы можете использовать следующую однострочную строку:
def discard_weapon(weapon)
@weapons.delete(weapon)
end
Похожие вопросы
Новые вопросы
java
Java — это высокоуровневый объектно-ориентированный язык программирования. Используйте этот тег, если у вас возникли проблемы с использованием или пониманием самого языка. Этот тег часто используется вместе с другими тегами для библиотек и/или фреймворков, используемых разработчиками Java.
break if discarded
внутри вашей итерации?discarded = false; @weapons.delete_if { |weapon| discarded = true if !discarded && weapon.type == w.type }
myArray.delete_at(myArray.index(n) || myArray.length)
, кажется, что она может помочь. Спасибо вам обоим!