Ruby:2个数组合并以保持重复
我搜索了数组方法和可枚举方法,但没有找到任何方法。如何将两个数组合并为一个数组,丢弃唯一的值并只保留重复的值 数组1=[1,2,3,4,5,6] 数组2=[3,4,5,6,7,8]Ruby:2个数组合并以保持重复,ruby,arrays,Ruby,Arrays,我搜索了数组方法和可枚举方法,但没有找到任何方法。如何将两个数组合并为一个数组,丢弃唯一的值并只保留重复的值 数组1=[1,2,3,4,5,6] 数组2=[3,4,5,6,7,8] Array_Result=[3,4,5,6]如果您只需要出现在两个数组中的项(称为),请使用运算符: [1, 2, 3, 4, 5, 6] & [3, 4, 5, 6, 7, 8] # => [3, 4, 5, 6 ] 我更喜欢Uri的答案,但这也适用: array1.uniq - (array1
Array_Result=[3,4,5,6]如果您只需要出现在两个数组中的项(称为),请使用运算符:
[1, 2, 3, 4, 5, 6] & [3, 4, 5, 6, 7, 8]
# => [3, 4, 5, 6 ]
我更喜欢Uri的答案,但这也适用:
array1.uniq - (array1-array2)
#=> [3, 4, 5, 6]
在我看来,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的示例似乎表明这是一个目标。阵列是唯一的吗?您是否只想要出现在两个数组中的项目(交叉点)?当然,如果OP真的只是寻找交叉点,那么Uri的答案肯定是最直接的。