You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:47:01