我有:
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
array1
与array2
中没有匹配的颜色符号,但我仍然以4
作为输出。我想知道为什么我的代码输出是4
。
答案 0 :(得分:3)
count
方法返回一个数字,并且每个数字在Ruby中都是真实的。唯一的非真实值是nil
和false
,所以这个表达式
near_matches += 1
始终执行。也许你可以做到
if array2.count(color1) > 0
near_matches += 1
end
答案 1 :(得分:1)
nil
和false
是唯一两个在Ruby中评估为false
的值。
参考:What evaluates to false in Ruby?
array2.count(color1)
永远不会返回nil
或false
,因此near_matches总是递增,最后它的值等于array1.size
你应该使用注射
array1.uniq.inject(0){ |sum,color| sum + array2.count(color) }