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
- 作者: まつもとゆきひろ,David Flanagan,卜部昌平(監訳),長尾高弘
- 出版社/メーカー: オライリージャパン
- 発売日: 2009/01/26
- メディア: 大型本
- 購入: 21人 クリック: 356回
- この商品を含むブログ (129件) を見る