Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 为什么在select方法中使用OR运算符而不是AND运算符?_Ruby_Logical Operators - Fatal编程技术网

Ruby 为什么在select方法中使用OR运算符而不是AND运算符?

Ruby 为什么在select方法中使用OR运算符而不是AND运算符?,ruby,logical-operators,Ruby,Logical Operators,给定一个家族成员散列,以键作为标题,以名称数组作为值,使用Ruby内置的select方法将直系家族成员的姓名收集到一个新数组中 # Given family = { uncles: ["bob", "joe", "steve"], sisters: ["jane", "jill", "beth"], brothers: ["frank","rob","david"], aunts: ["mary","sally","su

给定一个家族成员散列,以键作为标题,以名称数组作为值,使用Ruby内置的
select
方法将直系家族成员的姓名收集到一个新数组中

# 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方法中使用
|
运算符而不是
&&
运算符?当我使用
&&
运行它时,select方法返回一个空数组。

仔细想想。你的
k
是一个符号,符号不能同时是
:姐妹
:兄弟
,对吗?因此,使用
&&
时,块将永远不会为真

但在另一种情况下,
&&
起作用。比如说,你想过滤掉20岁以上60岁以下的人

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

在大多数编程语言中,
|
&
运算符分别表示

表达方式:

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

将转换为“选择
family
散列的所有元素,其中键为
:sisters
:brothers
”。正如@Ursus所指出的,在这种情况下,
k
同时等于
:brother
:sister
是没有意义的。

&&
|
是逻辑运算符:

  • a&b
    是真实的,如果
    a
    b
    都是真实的
  • 如果
    a
    是真实的或
    b
    是真实的(或两者都是),则
    a | | b
    是真实的
truthy(在Ruby中)的意思是除了
nil
false
之外的一切

让我们看看发生了什么,如果
a
k==:姐妹
b
k==:兄弟

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
:姐妹
或者
k
:兄弟
。这就是你想要的。

什么东西可以同时是姐妹和兄弟?