💭

配列の中の数字出現数をカウントする

に公開

練習問題 数値の出現率

どう検索してもハッシュ方式でカウントする結果しか出て来なかったので最終手段としてchatgptに相談してみた
書いてて思い出したけど多分Udemyで買ったどれかの動画でやったことあった気がする
ただしどの動画か忘れてしまった

自分が失敗したコード

n = gets.to_i
ary = gets.split.map(&:to_i)

count = Array.new(10)

ary.each do |i|
  count[i] += 1
end
=> ここでエラー
Main.rb:7:in `block in <main>': undefined method `+' for nil:NilClass (NoMethodError)

  count[i] += 1
           ^
	from Main.rb:6:in `each'
	from Main.rb:6:in `<main>'

正しいコード

n = gets.to_i
ary = gets.split.map(&:to_i)

count = Array.new(10, 0)
ary.each do |num|
  count[num] += 1
end

puts count.join(" ")

足りなかったこと

Array.newで二個目の引数に初期値を設定するのが足りなかった。
Array.new(10) のみだと配列の中身は
[nil,nil,nil,nil,nil,nil,nil,nil,nil,nil]なので+が使えずカウントできない

Discussion