Ruby — Я хочу, чтобы коды работали только при определенных условиях, но не знаю, как это сделать

#ruby #loops

Вопрос:

Я знаю, что я должен быть отсутствует что-то на arr2.each_index но я не могу придумать, что еще я могу добавить.. у меня плавится мозг лол коды ниже еще должна быть выполнена, только если там нет «Нум» в arr2 больше, то кол-во, Но теперь они выполняются всякий раз, когда есть на «чис» в arr2 больше, то кол-во. Я надеюсь, что этот вопрос имеет смысл.

 arr = [{"num":1,"head":5},{"num":3,"head":1},{"num":4,"head":1},{"num":5,"head":7}]
arr2 = [{"init1":[{"num":2,"head":1}]},{"init2":[{"num":35,"head":2}]},{"init3":[{"num":98,"head":1}]},{"init4":[{"num":51,"head":1},{"num":77,"head":5}]}]
arr3 = []

puts "Card you want to place outside? "
num = gets.chomp.to_i

def add_card_to_init(arr, arr2, arr3, num)  
  arr.each_with_index do |card, index|
    if card[:num] == num
        catch :skip do
            arr2.each_index do |index|
                x = arr2[index].values[0]
                if num > x[x.length-1][:num]
                  #code
                  puts "num > init"
                else
                  # code only runs when no num > x[x.length-1][:num] 
                  puts "num < init"
                  throw :skip
                end
            end
        end
    end
  end
end

add_card_to_init(arr, arr2, arr3, num)  
 

Ожидайте выхода, когда num = 3

 num > init
 

Но то, что у меня есть, это

 num > init
num < init
 

Заранее спасибо!

Комментарии:

1. Прочитайте эту статью для получения советов по отладке вашей программы.

2. Я не понимаю вашего вопроса. Всегда начинайте вопрос с изложения того, что вы пытаетесь сделать, без ссылки на ваш код. Часто бывает полезен пример, показывающий входные данные и желаемый результат (возвращаемое значение).

3. @Code-Ученик, большое тебе спасибо за статью! Я пойду и почитаю 🙂

4. @CarySwoveland, спасибо за ваши советы! У меня есть проблемы с формулировкой вопросов словами, так как у меня все еще мало опыта в этом вопросе. Но я очень надеюсь, что в будущем мне станет лучше..

Ответ №1:

самый простой способ-установить флаг «меньше» true перед входом в each_index цикл и установить его false внутри цикла, если init >= num . А затем запустите свой код вне цикла на основе флага. Это не элегантно, но быстро и грязно. При желании вы можете оставить цикл на первом false событии.

Комментарии:

1. Спасибо, Эрик! Я переписал коды и нашел способ сделать это сейчас 🙂