Ruby array.select多行块

时间:2012-06-14 02:42:43

标签: ruby

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

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

以上显然是不正确的,因为return退出方法,而不是阻止,但会提供我想要的内容。

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

4 个答案:

答案 0 :(得分:28)

您想要的是next而不是return

答案 1 :(得分:6)

编辑:刚看到这一点:“使用逻辑运算符绑定它们会导致混乱。” 你能提供实际的条件吗?

filtered_array = base_array.select do |elem|
    condition1 && condition2
end

答案 2 :(得分:3)

似乎可以通过案例陈述来处理:

filtered_array = base_array.select do |elem|
  case
  when condition1
    false
  when condition2
    false
  else
    true
  end
end

答案 3 :(得分:1)

您应该只使用:

next(true)

但如果与你没有关系,请执行以下操作:

my_array.select do |x|
  # bool = false ### optional, uncomment this if you prefer
  if x.id == 1
    bool = true
  end
  bool
end