【问题标题】:Skip first 'each" operator if condition does not exists如果条件不存在,则跳过第一个“每个”运算符
【发布时间】:2020-01-29 08:58:56
【问题描述】:

我有 2 个每个运算符,一个在另一个

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

如果first_arraynil,是否有可能首先跳过每个语句(first_array.each do |index, values_1|...)?

这意味着如果first_arraynil,他会省略第一条语句而只执行第二条:

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

【问题讨论】:

  • 在循环中使用了value_1 吗?如果是这样,当first_arraynil时应该使用什么值
  • 请提供更多上下文。 “跳过”是什么意思?猜测一下,根据您提供的有限信息,我会说在方法的顶部写一个保护子句:return unless first_array
  • 您的编辑没有多大意义。如果必须为first_array 中的每个事物执行某些操作,那么如果没有事物,则不应执行某些操作。你确定你的第二个each 循环应该嵌套在第一个循环中吗?
  • 我假设您在嵌套的each 内的某处使用values_1 - 如果first_arraynil,您期望什么值?
  • @3limin4t0r 不幸的是,是的。

标签: arrays ruby-on-rails ruby


【解决方案1】:

为您的first_array 分配一个默认值,您希望作为indexvalues_1 传递的元素。

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

上面将执行一次first_array 的内容,如果first_arraynil(或false),则使用给定的默认值。

如果您不想为first_array 指定默认值,请改用(first_array || [[nil, nil]]).each

感谢suggestion Stefan 更新答案以适应问题编辑。

【讨论】:

  • 是的,但不会调用second_array。我的目标是如果 first_array 他省略它并只调用 second_array 然后。
  • @Viktor 而不是一个空数组,分配一个单元素占位符值,例如first_array ||= [[0, nil]]0indexnilvalues_1 在循环内。
  • @Stefan 好建议,如果你不介意,我已经用它更新了答案。
【解决方案2】:

一种不对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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-07
    • 2020-09-29
    相关资源
    最近更新 更多