Ruby:2个数组合并以保持重复

时间:2014-06-20 19:39:52

标签: ruby arrays

我搜索了数组方法和可枚举的方法,但没有找到任何方法来执行此操作。如何将两个数组合并为一个数组,丢弃唯一值并仅保留重复数据?

Array1 = [1,2,3,4,5,6] Array2 = [3,4,5,6,7,8]

。 。 。

Array_Result = [3,4,5,6]

3 个答案:

答案 0 :(得分:7)

如果您想要的只是两个数组中出现的(这称为intersection) - 请使用&运算符:

[1, 2, 3, 4, 5, 6] & [3, 4, 5, 6, 7, 8]
# =>  [3, 4, 5, 6 ]

答案 1 :(得分:1)

我更喜欢Uri的答案,但这也有效:

array1.uniq - (array1-array2)
  #=> [3, 4, 5, 6]

答案 2 :(得分:0)

听起来像OP想要合并两个数组,然后丢弃在结果数组中没有重复的任何内容。如果是这种情况,我认为以下方法可以解决问题:

a3 = (array1 + array2)

# narrow it down to an array only the values which were duplicated
a3.inject(Hash.new(0)) { |hash,val| 
  hash[val] += 1
  hash 
}.each_pair.select { |(val,count)| 
  count > 1 
}.map { |(val,count)| 
  val 
}

这会删除重复项,但OP的示例似乎表明这是一个目标。