Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby:2个数组合并以保持重复_Ruby_Arrays - Fatal编程技术网

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

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

我搜索了数组方法和可枚举方法,但没有找到任何方法。如何将两个数组合并为一个数组,丢弃唯一的值并只保留重复的值

数组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-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的答案肯定是最直接的。