👏
Grow.rbのmy_uniq問題を解いてみる
Grow.rbとは:
Ruby力を高めたいRubyistたちが、コードを書いたりちょっとマニアックな内容を学んだりするコミュニティです。
オリジナルのmy_uniq
メソッドを作ってみようというテーマです。
テストコードはこちら。
書いた回答がこちら。each
のみを使う縛り。
module Enumerable
def my_uniq
hash = {}
each do |el|
key = block_given? ? yield(el) : el
hash[key] ||= el
end
hash.values
end
end
- いかに要素の重複を排除するか、というのがポイント
- Hashの「キーの一意性を管理する」という特性を使って、要素の重複を排除した
- これでHashのキーは一意性が担保される
-
||=
ですでにhash[key]
に値が存在していれば代入しないので、重複した値は代入されない - 結果的に、
hash.values
を返せば期待通りの値が返る
Discussion