Ruby: 配列で重複してるものを探す

一部の値が重複してる配列があるとする。この中から重複しているものを取り出したい。

ary = [1, 2, 3, 4, 5, 5, 6, 6, 7, 7]

こんな感じ

ary.select{ |e| ary.count(e) > 1 }.uniq
# => [5, 6, 7]

速い方法

ハッシュを作るので使うメモリは増えるが、先程の方法と違ってループアンドループしないのでこっちの方が速い。

ary.group_by{ |e| e }.select { |k, v| v.size > 1 }.map(&:first)
# => [5, 6, 7]

単に重複があるかどうかチェックしたい場合

(ary.count - ary.uniq.count) > 0
=> true

配列の積集合や和集合

ary = [1, 2, 3, 4, 5, 5, 6, 6, 7, 7];
ary2 = [1, 2, 3];

ary & ary2
# => [1, 2, 3]

ary | ary2
=> [1, 2, 3, 4, 5, 6, 7]

参考

https://stackoverflow.com/questions/8921999/ruby-how-to-find-and-return-a-duplicate-value-in-array

プログラミング言語 Ruby

プログラミング言語 Ruby