👏
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