配列内で重複している要素を見つける
自分用メモ。
Rubyで配列から重複したモノ(要素)を抜き出す(Uniqの逆) - それマグで!
上のリンクは一番素直な方法だと思うけど二重ループ。
ソートして隣り合っている要素を比べるという方法を試してみた。
a=[8, 1, 2, 3, 4, 5, 6, 7, 8, 9, 2, 4, 6, 8, 10, 10, 10] a_sorted = a.sort p a_sorted.each_with_index.map{|e,i| e==a_sorted[i-1] ? e : nil }.reject{|e| !e} #=>[2, 4, 6, 8, 8, 10, 10]
いくつ重複しているかもちゃんと分かる。
ソート後の配列の最初と最後を比較しちゃっているけど、まあいいか。
#ありえない凡ミスを2時間ほど晒していたのは秘密.
2012-06-30追記
id:takuya_1stさんからトラックバック返し(?)を頂きました。
あまり大きなデータを念頭に置いていなかったのですが、ソーティングのコストも合わせて考えないといけないですね。
データサイズやデータ配列のパターン(重複が多いのか少ないのかとか)といったことが影響しそう。
よりシンプルな書き方も教えていただいて感謝感謝。