我有兩個列表紅寶石 - 列表零下
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