✨
Grow.rbのmy_count問題を解いてみる
Grow.rbとは:
Ruby力を高めたいRubyistたちが、コードを書いたりちょっとマニアックな内容を学んだりするコミュニティです。
オリジナルのcountメソッドを作ってみようというテーマです。
countとは、配列やハッシュに含まれる要素数を数えるメソッドです。
> [1,2,3].count
=> 3
> {a:1, b:2, c:3}.count
=> 3
テストコードはこちら。
条件:size,lengthを使わないこと
書いた回答がこちら。
module Enumerable
def my_count(arg = nil)
count = 0
if arg
each do |element|
count += 1 if element == arg
end
elsif block_given?
each do |element|
count += 1 if yield(element)
end
else
each do |_element|
count += 1
end
end
count
end
end
ChatGPT4oを使ってリファクタしたのがこちら。injectを使っている。なるほどね〜。
module Enumerable
def my_count(arg = nil)
if arg
inject(0) { |count, element| count + (element == arg ? 1 : 0) }
elsif block_given?
inject(0) { |count, element| count + (yield(element) ? 1 : 0) }
else
inject(0) { |count, _| count + 1 }
end
end
end
Discussion