Rubyで配列内の重複する値を抽出する方法 というエントリを見て触発されてベンチマークを取ってみました. 紹介されている方法は下記のようなコード a = [1, 2, 3, 4, 5, 6, 5, 4] a.uniq.map{|v| v if a.inject(Hash.new(0)) {|h, key| h[key] += 1; h}[v] >= 2}.compact mapのブロック内でのイテレートはコストが高く, 下記のエントリのようにArray#indexとArray#rindex を使う方法が簡潔で早いと思います. Rubyで配列から重複したモノ(要素)を抜き出す(Uniqの逆) a.uniq.select{|i| a.index(i) != a.rindex(i)} ついでに,上記エントリにある方法に追加して「Hashに集計して重複しないものを削除」 a.inject(Hash