我搜索了数组方法和可枚举的方法,但没有找到任何方法来执行此操作。如何将两个数组合并为一个数组,丢弃唯一值并仅保留重复数据?
Array1 = [1,2,3,4,5,6] Array2 = [3,4,5,6,7,8]
。 。 。
Array_Result = [3,4,5,6]
答案 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的示例似乎表明这是一个目标。