Ruby array.select多行块

Ant*_*ado 19 ruby

我正在使用ruby过滤数组并使用.select块来执行此操作.条件足够复杂,单个行块是可怕的,但不是那么大,所以一个单独的方法似乎有点矫枉过正.因此,我想使用多行块.但是我不确定语法.

filtered_array = base_array.select do |elem|
    return false if condition1
    return false if condition2
    return true
end
Run Code Online (Sandbox Code Playgroud)

以上显然不正确,因为return退出方法,而不是块,但给出了我正在寻找的想法.

我也可以使用多个select语句,但这似乎混淆了我想要做的事情.请注意,上述条件足够复杂,使用逻辑运算符绑定它们会导致混乱.

rcr*_*ers 34

你想要的next不是return.

  • `next`可以取值,就像`return`一样.`next(true)`类似于`return(true)`. (16认同)

Kyl*_*yle 7

编辑:刚看到这个:"使用逻辑运算符绑定它们会导致混乱." 你能提供实际条件吗?

filtered_array = base_array.select do |elem|
    condition1 && condition2
end
Run Code Online (Sandbox Code Playgroud)


Wes*_*ger 6

你可能应该只使用:

next(true)
Run Code Online (Sandbox Code Playgroud)

但是,如果这不符合您的要求,请执行以下操作:

my_array.select do |x|
  # bool = false ### optional, uncomment this if you prefer
  if x.id == 1
    bool = true
  end
  bool
end
Run Code Online (Sandbox Code Playgroud)