我有两个列表红宝石 - 列表零下
a = [1, 2, 3, 4, 1, 2]
b = a.uniq # b = [1, 2, 3, 4]
c = a - b
结果被c = []
我预计结果c = [1, 2]
我怎样才能得到呢?
我有两个列表红宝石 - 列表零下
a = [1, 2, 3, 4, 1, 2]
b = a.uniq # b = [1, 2, 3, 4]
c = a - b
结果被c = []
我预计结果c = [1, 2]
我怎样才能得到呢?
这是根据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
)
阵列差异,返回一个新数组,它是原始数组的一个副本,删除也出现在other_ary任何项目。 (如果您需要设置类似的行为,看到库班设置。)
您正在寻找所有重复或uniq的相反?也许这个链接将帮助:Identify duplicates in an array
如果你想从它出现的数组元素不止一次,你可以使用下面的代码:
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)
keep_if不是ruby 2.0及以上版本 – owade