我正在使用ruby过滤数组并使用.select
块来执行此操作。条件足够复杂,单个行块是可怕的,但不是那么大,所以一个单独的方法似乎有点矫枉过正。因此,我想使用多行块。但是我不确定语法。
filtered_array = base_array.select do |elem|
return false if condition1
return false if condition2
return true
end
以上显然是不正确的,因为return
退出方法,而不是阻止,但会提供我想要的内容。
我也可以使用多个select语句,但这似乎混淆了我想要做的事情。请注意,上述条件非常复杂,使用逻辑运算符绑定它们会导致混乱。
答案 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