49hack

見習いエンジニアが魔法使いになるまで

配列から重複した要素を取り除くのではなく取り出す

ただ単に重複した要素を取り除く場合は、uniqを使えばOKです。

a = [1,2,3,5,1,2,4]
a.uniq
=> [1, 2, 3, 4, 5]

今回は、重複した要素そのものを取り出したい、つまり、先ほどの配列aから[1,2]を抽出します。

a = [1,2,3,5,1,2,4]
a.uniq.map { | e | [e, a.count(e)] }.select { | _, c | c > 1 }.map{ |e, c| e }
=> [1, 2]

ちなみにrubyのバージョンは以下のとおりです。

ruby 2.1.2p95 (2014-05-08 revision 45877) [x86_64-darwin14.0]

参考