2017-09-10 4 views
-2

キーをタイトルとして使用し、名前の配列を値として使用すると、Rubyの組み込みのselectメソッドを使用して、直接の家族の名前のみを新しい配列に集めます。selectメソッドでAND演算子の代わりにOR演算子が使用されるのはなぜですか?

# Given 

family = { uncles: ["bob", "joe", "steve"], 
      sisters: ["jane", "jill", "beth"], 
      brothers: ["frank","rob","david"], 
      aunts: ["mary","sally","susan"] 
      } 

溶液である:

immediate_family = family.select do |k, v| 
    k == :sisters || k == :brothers 
end 

arr = immediate_family.values.flatten 

p arr 

なぜ||オペレータが選択方法に代わり&&オペレータにより使用されていますか? &&で実行すると、selectメソッドは空の配列を返します。

+1

「姉妹」と「兄弟」は同時にどのようなことができますか? – sawa

+0

私はばかな質問をして申し訳ありません。私はまだプログラミングを学んでいて、プログラミングのロジックはそれほど良いものではありません。しかし、答えに感謝します。 –

答えて

1

||&&演算子は、ほとんどのプログラミング言語で、それぞれorandを意味して人々をフィルタリングしたいとしましょう。

の式:

family.select do |k, v| 
    k == :sisters || k == :brothers 
end 

は「キーが:sistersまたは:brothersあるfamiliyハッシュのすべての要素を選択する」に変換します。 @Ursusが指摘しているように、この場合、k:brother:sisterに等しいとは限りません。

3

考えてみてください。あなたのkはシンボルであり、シンボルは同時に:sisters:brothersの両方になることはできません。だから、&&とブロックは決して真ではないでしょう。

しかし、別のコンテキストでは、&&はジョブを実行します。あなたは20年以上と60未満

people.select { |person| person.age > 20 && person.age < 60 } 
0

&&||論理演算子である:aがtruthyある場合又はbはtruthy(または両方)である場合、a及びb両方がtruthy

  • a || bある場合

    • a && bはtruthyあることtruthyある

    truthy(Rubyで)は0123以外のすべてを意味しますまたはfalse

    ak == :sistersで、bk == :brothersであれば、のは何が起こるか見てみましょう:

    与えられた値については
    k   a  b  a && b a || b 
    :uncles  false false false false 
    :sisters true false false true 
    :brothers false true false true 
    :aunts  false false false false 
    

    k:sisterskがある場合であればa || btrueを返すのに対し、a && bは常に、falseを返します:brothers 。それはあなたが望むものです。

  • 関連する問題