Rubyでハッシュの中に重複した値があるか調べる

タグ: ruby / 公開: 2014-08-04

Twitterで見かけて目からウロコだったので紹介する。

以下のようなハッシュがある時に、ハッシュの値に重複した値があるかを調べたいとする。

h = {a:1, b:2, c:3, d:1}

重複した値があるかは以下のように調べられる。 Hash#invertでキーと値を逆にしたハッシュを生成する。 キーと値を逆にしたハッシュは、重複した値がある場合にサイズが少なくなる。 これを元のハッシュのサイズと比較することで、重複した値があるかを判定できる。

if h.size == h.invert.size
  puts "重複した値なし"
else
  puts "重複した値あり"
end

Hash#valuesで値の配列を作って、Array#uniqしてサイズを比較しても、同じ結果が得られる。 ただHash#invertの方がメソッドの呼び出しが少ないのでスマートだろう。

この記事をSNSでシェアする
タイトルとURLをコピーする
または投稿画面を開く
Author
Icon
ぺけみさお / xmisao
プログラマ。
Subscription
Recent articles
Related to ruby