2017-09-10 78 views
-2

給定家庭成員的散列值,以鍵爲標題和名稱數組作爲值,使用Ruby的內置select方法僅將直接家庭成員的名稱收集到新數組中。爲什麼在選擇方法中使用OR運算符而不是AND運算符?

# 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

怎麼能同時有':sisters'和':brothers'? – sawa

+0

對不起,如果我問一個愚蠢的問題。我仍然在學習編程,而我在編程方面的邏輯還不是很好。但是,謝謝你的答案。 –

回答

1

||&&運營商在大多數編程語言分別指orand

表達:

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

將轉化爲「選擇familiy散列的所有元件,其中鍵是:sisters:brothers或」。正如@Ursus指出的那樣,在這種情況下,k同時等於:brother:sister是沒有意義的。

3

想一想。您的k是一個符號,符號不能同時爲:sisters:brothers,可以嗎?所以,&&該塊永遠不會是真的。

但在另一種情況下&&完成這項工作。比方說,你想篩選出人超過20年,並少於60

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

&&||是邏輯操作符:

  • a && b是truthy如果兩者ab是truthy
  • a || b是truthy如果a是truthy或者如果b是truthy(或兩者)

truthy(在Ruby中)意思是除0123之外的所有東西或false

讓我們看看會發生什麼,如果ak == :sistersbk == :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 

對於給定的值,a && b總是返回false,而a || b將返回true如果k:sisters,或者如果k:brothers 。這是你想要的。

相關問題