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?

[Ruby]ハッシュのpushメソッドと << の違いについて

Last updated at Posted at 2025-10-09

初めての記事投稿です。

hush({ name: 'ポチ', animal: '犬', age: 5, weight: 12.3 })が引数として与えられたhushから
nameは、ポチです。animalは、犬です。ageは、5です。weightは、12.3です。を返したいとき

def hush(dog_profile)
  message = ""
  dog_profile.each do |key, value|
    message << ("#{key}は、#{value}です。")
  end
  message
end
puts hush({ name: 'ポチ', animal: '犬', age: 5, weight: 12.3 })
# =>
# nameは、ポチです。animalは、犬です。ageは、5です。weightは、12.3です。`

これがOKで

 def  hush(dog_profile)
  message = ""
  dog_profile.each do |key, value|
    message.push("#{key}は、#{value}です。")
  end
  message
end

puts hush({ name: 'ポチ', animal: '犬', age: 5, weight: 12.3 })

これだとエラーになる。

in `block in hush': undefined method `push' for "":String (NoMethodError)
        from chapter6/basic_hash.rb:3:in `each'       
        from chapter6/basic_hash.rb:3:in `hush'       
        from chapter6/basic_hash.rb:9:in `<main>' 

message = ""の『””』の部分
"<<"は文字列(string)
pushメソッドは配列(array) undefined method `push' for "":String (NoMethodError)
にしか追加できなさそう。

では
message = []
にしてあげればうまくいくと仮定し、変更して実施したところ

nameは、ポチです。
animalは、犬です。
ageは、5です。
weightは、12.3です。

とそれぞれが別々に呼び出されてしまう。

pushメソッドにより、message["nameは、ポチです。","animalは、犬です。","ageは、5です。","weightは、12.3です。"]
この配列が作られたので、joinメソッドで結合してあげれば目的物が返ってくる。

def  hush(dog_profile)
  message = [] 
  dog_profile.each do |key, value|
    message.push("#{key}は、#{value}です。")
  end
  message.join
end

puts hush({ name: 'ポチ', animal: '犬', age: 5, weight: 12.3 })

# =>
# nameは、ポチです。animalは、犬です。ageは、5です。weightは、12.3です。

結論
まとめ

文字列を作りたいなら
message = "" で始めて << で連結する。

配列に要素をためていきたいなら
message = [] で始めて push で追加し、最後に join で文字列化する。

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?