1

私はrubyのEnumerator#rejectと少し混乱しています。次のコードを検討してください。

(1..10).select {|i| i % 3 == 0 || i % 5 == 0 } => [3, 5, 6, 9, 10]

次の行は同等ではありませんか?

(1..10).reject {|i| i % 3 != 0 || i % 5 != 0 } => []

拒否メソッドで条件を1つだけ使用すると、期待どおりの結果が得られます。しかし、OR演算子を含めると、結果は空になります。誰かが私のためにこれを明確にすることができますか?

(1..10).reject {|i| i % 3 != 0} => [3, 6, 9]
4

3 に答える 3

8

あなたは基本的な論理の間違いを犯しています:

!(A || B)と同等であり、同等では!A && !Bありません!A || !B

したがって||、2番目の例のをに変更すると、2&&番目の例は最初の例と同じ結果になります。

(1..10).reject {|i| i % 3 != 0 && i % 5 != 0 } # => [3, 5, 6, 9, 10]
于 2011-07-04T16:23:03.390 に答える
3

あなたはド・モルガンの法則の1つに遭遇しました。

p And q = Not((Not p)Or(Not q))
p Or   q  = Not((Not p)And(Not q))

近かったのですが、オペレーターの変更を忘れてしまいました。

于 2011-07-04T16:50:43.230 に答える
0

||2番目のコードでは、等式を変更したため、をに変更する必要があります&&

(1..10).reject {|i| i % 3 != 0 && i % 5 != 0 } => [3, 5, 6, 9, 10]
于 2011-07-04T16:23:26.010 に答える