Ruby中如何比较两个数组,统计同索引均为1的元素数量?
解决Ruby数组对比的共同赞成票问题
嘿,你的思路方向是对的,现在只需要调整判断逻辑,同时处理一个容易踩的小坑,就能搞定这个问题啦!
问题分析
你当前的代码只检查了单个数组的元素是否为1,没有同时对比另一个数组对应索引的元素;另外要注意:用户输入的是字符串,split('')后得到的是字符串类型的数组元素,所以判断时要和"1"(字符串)比较,而不是数字1哦!
修改后的完整代码
def count_votes bob_votes = gets.chomp alice_votes = gets.chomp bvotes = bob_votes.split('') avotes = alice_votes.split('') common_upvotes = [] # 遍历数组,同时对比相同索引的两位投票 bvotes.each_with_index do |bob_vote, idx| # 先确保索引在另一个数组的范围内,避免越界错误 if idx < avotes.length && bob_vote == "1" && avotes[idx] == "1" common_upvotes << 1 end end common_upvotes # 返回最终的共同赞成票数组 end # 可以直接调用测试 p count_votes
关键修改说明
- 完善判断逻辑:新增对
avotes[idx] == "1"的检查,确保相同索引位置两人都投了赞成票才添加1到结果数组。 - 修复类型匹配问题:把原来的
== 1改成== "1",因为输入拆分后是字符串元素,和数字1对比永远不成立。 - 添加边界保护:加入
idx < avotes.length,防止用户输入两个长度不同的字符串时出现数组越界错误,只会对比到较短数组的最后一个元素。 - 简化遍历写法:用
each_with_index直接获取当前元素和索引,比each.with_index(0)更简洁直观。
测试示例
如果输入:
101011 001010
运行后会返回[1, 1],对应索引2和4的位置(从0开始计数),这两个位置两人都投了1,完全符合你的需求。
另外,如果你的实际需求是统计共同赞成票的数量,而不是生成数组,也可以把common_upvotes << 1改成计数变量累加(比如count += 1),灵活调整即可~
内容的提问来源于stack exchange,提问作者user3576036
相关产品推荐
相关产品推荐

