Пропустите первый оператор «каждый», если условие не существует - PullRequest
0 голосов
/ 29 января 2020

У меня по 2 оператора, один внутри другого

first_array.each do |index, values_1|
   second_array.each do |index, values_2|
      # --some action goes here--
   end
end

Есть ли возможность пропустить сначала каждое утверждение (first_array.each do |index, values_1|...), если first_array равно nil?

Это означает, что если first_array равно nil, он пропускает первое утверждение и выполняет только второе:

   second_array.each do |index, values_2|
      # --some action goes here--
   end

Ответы [ 2 ]

3 голосов
/ 29 января 2020

Присвойте значение по умолчанию вашему first_array, с элементами, которые вы хотите передать как index и values_1.

first_array ||= [[nil, nil]] # assign a default value if falsy
first_array.each do |index, values_1|
  # ...
end

Выше будет выполнено содержимое first_array один раз, с заданными значениями по умолчанию, если first_array равно nil (или false).

Если вы не хотите назначать значение по умолчанию для first_array, используйте (first_array || [[nil, nil]]).each вместо.

Спасибо за предложение Стефан, который обновляет ответ в соответствии с вопросом редактирования.

1 голос
/ 29 января 2020

Подход без назначения значений по умолчанию для first_array.

final_array = second_array

final_array = first_array.each_with_object([]) do |ele_from_first_array, result|
  second_array.each { |ele_from_second_array| result << ele_from_second_array + [ele_from_first_array[1]] }
end if first_array.present?

final_array.each do |sa_i, sa_v, fa_v|
  # fa_v will be nil if first_array is nil

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