26

我在 ruby​​ 中过滤一个数组并使用一个.select块来这样做。条件非常复杂,以至于单个行块是可怕的,但不是那么大,因此单独的方法似乎过大了。因此我想使用多行块。但是我不确定语法。

filtered_array = base_array.select do |elem|
    return false if condition1
    return false if condition2
    return true
end

上面的内容显然是不正确的,因为return退出了方法,而不是块,但给出了我正在寻找的东西的想法。

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

4

4 回答 4

43

你想要的是next而不是return.

于 2012-06-14T03:06:56.153 回答
7

编辑:刚刚看到这个:“使用逻辑运算符绑定它们会导致混乱。” 能否提供实际情况?

filtered_array = base_array.select do |elem|
    condition1 && condition2
end
于 2012-06-14T02:47:50.613 回答
5

您可能应该只使用:

next(true)

但是,如果这不适合您,请执行以下操作:

my_array.select do |x|
  # bool = false ### optional, uncomment this if you prefer
  if x.id == 1
    bool = true
  end
  bool
end
于 2017-04-25T19:22:48.780 回答
3

似乎可以使用 case 语句来处理:

filtered_array = base_array.select do |elem|
  case
  when condition1
    false
  when condition2
    false
  else
    true
  end
end
于 2012-06-14T02:53:15.813 回答