是否有一种方法来比较两个数组,并返回具有相同索引的共同元素的新数组?



例如

a = [2,3,1,1]
b = [2,7,4,2]
--> c = [2]

我的解决方案是:

c = b.select do
|em| b.index(em) == a.index(em)
end

但是如果我把它应用到给定的例子中它返回

c = [2,2]

因为您想比较数组元素,zip将是一个很好的选择。

a.zip(b) # => [[2, 2], [3, 7], [1, 4], [1, 2]]
a.zip(b).select {|a1, b1| a1 == b1}.map(&:first) # [2]
# or in ruby 2.7+
a.zip(b).filter_map {|a1, b1| a1 == b1 && a1} # [2]
a = [2,3,1,1]
b = [2,7,4,2]
c = b.select do |em|
b.index(em) == a.index(em)
end

b.select do |em|取b的第一个元素(即2)。b.index(em)查找包含2的第一个索引,即第一个一个。由于数组a在相同的索引上有一个2,所以整个块为真,元素2被选中。但最后一个元素也是如此。同样,搜索b数组,优先在索引0处找到2。因此,该2也被选中。

a.each_with_index.to_a & b.each_with_index.to_a

将给出公共元素及其索引。

最新更新