Ruby-list减号

Ruby-list减号,ruby,arrays,Ruby,Arrays,我有两张单子 a = [1, 2, 3, 4, 1, 2] b = a.uniq # b = [1, 2, 3, 4] c = a - b 结果得到c=[] 我期望结果c=[1,2] 我怎样才能得到这个?从 Array Difference返回一个新数组,该数组是原始数组的副本,删除其他数组中出现的所有项。(如果需要类似集合的行为,请参见库类集合。) 根据报告,这是预期结果 如果要获取数组中多次出现的值,可以执行以下操作: a.uniq.keep_if {|v| a.count(v) >

我有两张单子

a = [1, 2, 3, 4, 1, 2]
b = a.uniq # b = [1, 2, 3, 4]

c = a - b
结果得到
c=[]

我期望结果
c=[1,2]

我怎样才能得到这个?

Array Difference返回一个新数组,该数组是原始数组的副本,删除其他数组中出现的所有项。(如果需要类似集合的行为,请参见库类集合。)


根据报告,这是预期结果

如果要获取数组中多次出现的值,可以执行以下操作:

a.uniq.keep_if {|v| a.count(v) > 1}
a.uniq.delete_if {|v| a.count(v) == 1}
如果使用Ruby 1.8,
keep\u If
不可用,因此您需要使用类似以下内容:

a.uniq.keep_if {|v| a.count(v) > 1}
a.uniq.delete_if {|v| a.count(v) == 1}

(两种方法都保持
a
的完整性)

您是在寻找所有重复的还是uniq的反面?此链接可能会有所帮助:

如果要从多次出现的数组中获取元素,可以使用以下代码:

a.delete_if { |x| a.count(x) <= 1 }.uniq
i = 0
a.drop_while { |x| b[i+=1] == x }.uniq

看起来您正在尝试查找具有重复项的元素。以下是几种方法,选择您喜欢的方法:

a.select { |x| a.count(x) > 1 }.uniq
a.sort.each_cons(2).map { |x,y| x if x == y }.compact
a.group_by{|x|x}.values.select{|k|k.size>1}.map(&:first)

如果不在ruby 2.0及以上版本中,请保留