【Ruby】mergeメソッドを用いてハッシュを結合させる方法をわかりやすくまとめてみた!!

みなさんこんにちは!
のむ(@nomu_engineer)です!

今回の記事では、mergeメソッドを使ってハッシュを結合させる方法についてわかりやすくまとめてみました!

この記事を読むメリット
・mergeメソッドを使ってハッシュを結合させる方法を理解できる

この記事を読むおすすめの読者
・プログラミング初心者
・駆け出しエンジニア
・mergeメソッドについて知識が浅い方

それでは早速本題の方に入っていきたいと思います

mergeメソッドとは

mergeメソッドとは複数のハッシュを結合させることができるメソッドです。

重複するキーがある場合は引数として渡された方のハッシュのキーを上書きします。

mergeメソッドにも破壊的メソッドは存在し、語尾に「!」をつけることで破壊的メソッドにすることができます。
破壊的メソッドについて詳しく知りたい方はこちらの記事を参考にしてみてください!

破壊的メソッドについてまとめた記事

mergeメソッドをよく使う場面として、paramsを用いた記述によく使われると思います。
paramsはハッシュ形式でデータを格納しているので、mergeメソッドを用いることができます。

何気なく、paramsにmergeメソッドを用いてる人がいたら、ここはmergeメソッドを使える理由として抑えておきましょう!

mergeメソッドを使ってハッシュを結合させる方法

mergeメソッドの記述の仕方は以下のようになります。

ハッシュオブジェクト.merge(追加するハッシュオブジェクト)

レシーバとなるハッシュオブジェクトの箇所に、どのハッシュオブジェクトにデータを追加したいのかを明示します。

そして、mergeの右側の()内のハッシュオブジェクトに、新しく追加したいハッシュを記述します。

実際に例を用いてコードを記述したのでみていきましょう!

hash1 = {"りんご" => "apple" , "みかん" => "orange", "ぶどう" => "grape"}

hash2 = {"バナナ" => "banana"}

hash3 = hash1.merge(hash2)

puts hash3
=> {"りんご" => "apple" , "みかん" => "orange", "ぶどう" => "grape", "バナナ" => "banana"}

puts hash1
=> {"りんご" => "apple" , "みかん" => "orange", "ぶどう" => "grape"}

puts hash2
=> {"バナナ" => "banana"}

このように記述することで、mergeメソッドを用いてハッシュを結合させることができます。

上記のコードを見てもらうとわかると思うのですが、mergeメソッドは非破壊的メソッドになるので、レーシーバーであるハッシュオブジェクトの「hash1」のデータは変更されていないことがわかります。

これが、「merge!」という風に破壊的メソッドを用いると、hash1はhash2のデータを含んだ状態を保持するようになります。

詰まるところどういうことかというと、hash1とhash3の値が同じになるということです。

実際に上記のmergeメソッドをmerge!メソッドに置き換えて記述してみたいと思います。

hash1 = {"りんご" => "apple" , "みかん" => "orange", "ぶどう" => "grape"}

hash2 = {"バナナ" => "banana"}

hash3 = hash1.merge!(hash2)

puts hash3
=> {"りんご" => "apple" , "みかん" => "orange", "ぶどう" => "grape", "バナナ" => "banana"}

puts hash1
=> {"りんご" => "apple" , "みかん" => "orange", "ぶどう" => "grape", "バナナ" => "banana"}


puts hash2
=> {"バナナ" => "banana"}

違いは先ほども説明した通りで、レシーバであるhash1の元データにhash2のデータが含まれるようになるということです。

非破壊的メソッドと破壊的メソッドは使う状況によってうまく使い分けましょう!

最後にキーが重複してしまった時の、パターンを記述して終わりたいと思います。

hash1 = {"りんご" => "apple" , "みかん" => "orange", "ぶどう" => "grape"}

hash2 = {"みかん" => "banana"}

hash3 = hash1.merge(hash2)

puts hash3
=> {"りんご" => "apple" , "みかん" => "banana", "ぶどう" => "grape"}

上記のように「みかん」というキーが重複した場合、引数で渡したハッシュが上書きされて、hash3では「みかん」キーの値は「banana」に置換されています。

このようにキーが重複した場合は引数で渡した値が上書きされる形になりますので、ここも抑えておきましょう!

補足として付け加えておくと、みかんはどう頑張っても、bananaになることはできません。。。
みかんはみかんです。。。

最後に

以上がmergeメソッドを用いたハッシュを結合させる方法です!

最後にまとめて終わります!

・mergeとはハッシュを結合することができるメソッド

・merge!とすることで、破壊的メソッドになる

・キーが重複した場合は引数で渡した値が上書きされる

mergeメソッドはよく使うメソッドの一つでもあるのでしっかり抑えておきましょう!!

ありがとうございました!!

スポンサーリンク




この記事を書いた人