1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Ruby:「Hash.new()」「Hash.new(0)」について

Last updated at Posted at 2023-05-03

Hash.new()

Hash.new()で作成されたハッシュは、存在しないキーが指定されるとnilが返されます。

hash1 = Hash.new()
hash1["apple"] = 3
hash1["banana"] = 2

puts hash1["apple"]   # 3が出力されます
puts hash1["banana"]  # 2が出力されます
puts hash1["orange"]  # nilが出力されます

Hash.new(0)

Hash.new(0)で作成されたハッシュは、存在しないキーが指定されるとデフォルト値である0が返されます。

hash2 = Hash.new(0)
hash2["apple"] = 3
hash2["banana"] = 2

puts hash2["apple"]   # 3が出力されます
puts hash2["banana"]  # 2が出力されます
puts hash2["orange"]  # 0が出力されます

Hash.new()Hash.new(0)の違い

存在しないキーにアクセスしたときに返される値(デフォルト値)が異なります。Hash.new()の場合、デフォルト値はnilですが、Hash.new(0)の場合、デフォルト値は0です。

Hash.new(0)を利用するメリット

このコードでは、ハッシュの値をカウントしています。Hash.new(0)を利用することで、存在しないキーにアクセスしたときに返される値が0になるため、ハッシュの値をカウントするような場合に便利です。Hash.new()を利用することで、"apple","banana"キーが存在しないため、undefined method `+' for nil:NilClass (NoMethodError)のエラーになります。

# Hash.new(0)を利用するメリット
hash = Hash.new(0)
hash["apple"] += 1
hash["banana"] += 1
hash["apple"] += 1
puts hash["apple"]   # 2が出力されます
puts hash["banana"]  # 1が出力されます
puts hash["orange"]  # 0が出力されます

# Hash.new()の場合
hash = Hash.new()
hash["apple"] += 1 # undefined method `+' for nil:NilClass (NoMethodError)
hash["banana"] += 1 # undefined method `+' for nil:NilClass (NoMethodError)
1
1
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?