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

如何对比两个数组并返回相同索引位置共同元素组成的新数组

问题原因
  • Array#index 方法的返回值是指定元素在数组中首次出现的索引,而非遍历过程中当前元素的实际索引。你提供的示例中,b数组末尾的2调用b.index(2)返回值为0,a数组调用a.index(2)返回值也为0,因此这个2也会被判定符合条件,最终返回结果为[2,2],和预期不符。
  • 现有代码逻辑是匹配两个数组中首次出现位置相同的元素,和需求「相同索引位置的共同元素」逻辑不一致。
正确实现

有两种常用的简洁实现方式:

方式1:使用each_with_index遍历索引

a = [2,3,1,1]
b = [2,7,4,2]
c = []
b.each_with_index do |item, idx|
  c << item if item == a[idx]
end

方式2:使用zip+select组合写法

a = [2,3,1,1]
b = [2,7,4,2]
c = a.zip(b).select { |val_a, val_b| val_a == val_b }.map(&:first)

如果两个数组长度不一致,上述写法默认只会判断到较短数组的最大索引,若需要特殊处理长度不一致的场景,可以额外增加长度校验逻辑。

内容的提问来源于stack exchange,提问作者dedalus

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 12:48:03