Ruby数组符号计数异常:无匹配为何返回结果4?
为什么我的Ruby代码统计匹配颜色时返回4而不是0?
咱们来拆解一下这个问题哈,你遇到的情况其实是Ruby里条件判断的一个常见小坑~
先看你的代码逻辑:你遍历array1里的每个color1,每次检查array2.count(color1),如果这个结果为真就给near_matches加1。但问题核心出在Ruby的条件判断规则上:
在Ruby中,只有nil和false会被判定为“假”,其他所有值(包括数字0、空数组、空字符串这些)都会被当作“真”。
你的array2里没有:blue,所以每次array2.count(:blue)都会返回0——而0是一个有效的整数对象,在if条件里会被视为true,所以循环的4次迭代里,每一次都会执行near_matches +=1,最后结果自然就是4了。
怎么修正?
你需要明确判断“匹配数量是否大于0”,或者用更高效的include?方法(因为count会遍历整个数组统计数量,而include?找到匹配项就会停止,性能更好):
方法一:判断count结果大于0
near_matches = 0 array1.each do |color1| if array2.count(color1) > 0 near_matches += 1 end end near_matches #=> 0
方法二:用include?替代count
near_matches = 0 array1.each do |color1| if array2.include?(color1) near_matches += 1 end end near_matches #=> 0
甚至可以用更简洁的Ruby风格写法一步到位:
near_matches = array1.count { |color| array2.include?(color) } # 直接返回0
内容的提问来源于stack exchange,提问作者Bri Expost
相关产品推荐
相关产品推荐

