我有两个清单
a = [1, 2, 3, 4, 1, 2]
b = a.uniq # b = [1, 2, 3, 4]
c = a - b
结果获得c = []
我希望结果为c = [1, 2]
我怎么能得到这个?
答案 0 :(得分:5)
这是根据Array documentation的预期结果。
如果你想获得在数组中有多次出现的值,你可以这样:
a.uniq.keep_if {|v| a.count(v) > 1}
如果使用Ruby 1.8,则keep_if
不可用,因此您需要使用以下内容:
a.uniq.delete_if {|v| a.count(v) == 1}
(两种方法都保持a
完整无缺)
答案 1 :(得分:2)
如果您想从多次出现的数组中获取元素,可以使用以下代码:
a.delete_if { |x| a.count(x) <= 1 }.uniq
如果要根据元素位置对两个数组执行子操作,可以使用以下代码:
i = 0
a.drop_while { |x| b[i+=1] == x }.uniq
答案 2 :(得分:1)
数组差异 - 返回一个新数组,该数组是原始数组的副本,删除也出现在other_ary中的所有项。 (如果您需要类似集合的行为,请参阅库类Set。)
答案 3 :(得分:0)
您正在寻找所有重复或与uniq相反的副本?也许这个链接会有所帮助:Identify duplicates in an array
答案 4 :(得分:0)
看起来您正在尝试查找具有重复项的元素。这有几种方法,选择你喜欢的方式:
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)