计算数组中的符号

时间:2018-05-15 17:40:54

标签: arrays ruby counting

我有:

array1 = [:blue, :blue, :blue, :blue]
array2 = [:green, :green, :yellow, :red] 

我正在尝试计算array2中有多少蓝色符号,即0。我做了:

near_matches = 0
array1.each do |color1|
  if array2.count(color1)
    near_matches += 1
  end
end

near_matches #=> 4

array1array2中没有匹配的颜色符号,但我仍然以4作为输出。我想知道为什么我的代码输出是4

2 个答案:

答案 0 :(得分:3)

count方法返回一个数字,并且每个数字在Ruby中都是真实的。唯一的非真实值是nilfalse,所以这个表达式

near_matches += 1
始终执行

。也许你可以做到

if array2.count(color1) > 0
  near_matches += 1
end 

答案 1 :(得分:1)

nilfalse是唯一两个在Ruby中评估为false的值。

参考:What evaluates to false in Ruby?

array2.count(color1)永远不会返回nilfalse,因此near_matches总是递增,最后它的值等于array1.size

你应该使用注射

array1.uniq.inject(0){ |sum,color| sum + array2.count(color) }