26

私はrubyで配列をフィルタリングし、.selectブロックを使用してフィルタリングしています。条件は十分に複雑であるため、単一のラインブロックは恐ろしいですが、それほど大きくはないため、別の方法はやり過ぎのように見えます。したがって、複数行のブロックを使用したいと思います。ただし、構文がわかりません。

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

上記はreturn、ブロックではなくメソッドを終了するときに明らかに正しくありませんが、私が探しているもののアイデアを提供します。

複数のselectステートメントを使用することもできますが、それでは私がやろうとしていることがわかりにくくなるようです。上記の条件は十分に複雑であるため、論理演算子を使用してそれらをバインドすると、混乱が生じることに注意してください。

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 に答える