Rubyでハッシュをマージ(結合)する方法まとめ

19/01/27 17:20:20     19/05/06 11:54:50

マージしたい人

ハッシュとは?

インターネットではハッシュという用語は通信の暗号化のためにデータを一見ランダムに見える情報に置き換えるもの、といった意味合いで使われることが多いです。ハッシュという用語自体は「寄せ集め」という意味がありますが、暗号化のためにランダムな情報を寄せ集めてデータを作ったイメージです。

そして、ハッシュ化の結果、値とキーをセットで保持することになります。たとえば特定のファイルをハッシュ化したら、そのファイルが値、ハッシュがキーになるという考え方です。

予備知識のようなものなので覚えておく必要はありませんが、寄せ集めというもとの意味からやや派生して、値に対してランダム風にキーを生成するのがハッシュの概念ということです。

Rubyのハッシュ

次に、Rubyにおいてはさらにハッシュの意味合いが派生しており、値とキーをセットで保持するオブジェクトのことをハッシュオブジェクトと言っています。上記の通り予備知識なので必ずしも把握しておく必要はないのですが、ハッシュの意味合いが派生して変わっていることを知っていないと「結局ハッシュって何?」というように混乱するかもしれません。

説明が長くなりましたが、要するにハッシュの意味合いが「寄せ集め」→「暗号化」→「値とキーのセット」と派生しており、状況に応じて言葉の意味合いが変わる、くらいに考えておいてください。

ハッシュに限ったことではありませんが、プログラミングに関する用語は案外複数の意味を持っており、混同して曖昧な使われ方をすることが多いです。なので、用語の定義はある程度把握しておいて、だいたいの意味合いで臨機応変に考えることも重要です。

このページでは、Rubyでこのハッシュをマージ(結合)する方法を紹介します。

ハッシュの基本形

Rubyにおいてハッシュは値とキーをセットで保持するオブジェクトで、必ずしも暗号化のためにキーを使う必要はありません。そしてハッシュの例としては以下のようになります。

Month = {"January": "1月", "February": "2月", "March": "3月", "April": "4月", "May": "5月", "June": "6月", "July": "7月", "August": "8月", "September": "9月", "October": "10月", "November": "11月", "December": "12月"}

p Month

上記のコードを実行すると、以下のようにコンソール出力されます。

{:January=>”1月”, :February=>”2月”, :March=>”3月”, :April=>”4月”, :May=>”5月”, :June=>”6月”, :July=>”7月”, :August=>”8月”, :September=>”9月”, :October=>”10月”, :November=>”11月”, :December=>”12月”}

キー(key)とバリュー(value)の順番なので、Januaryのような英語表記の月がキー、1月のような数字と日本語表記の方がバリューです。

ハッシュをマージ(結合)する方法

ハッシュの基本形は上記の通りです。ハッシュの操作はいろいろありますが、まずマージ(結合)について紹介します。サンプルコードは以下です。

hash_1 = { Ruby: 1, Python: 2}
hash_2 = { Java: 3, Swift: 4}
hash_1.merge(hash_2)
=> {:Ruby=>1, :Python=>2, :Java=>3, :Swift=>4}

コードは非常にシンプルで、おそらくパッと見の直感で理解できるかと思います。ハッシュオブジェクトが二つあり、hash_1に対してmergeメソッドを使い、引数にhash_2を指定しました。

これにより、hash_1にhash_2が結合されました。上記のコードでは結合は一時的なもので、hash_1とhash_2は元のままです。元のハッシュオブジェクト自体に変更を加えたい場合、以下のように記述します。

hash_1.merge!(hash_2)
=> {:Ruby=>1, :Python=>2, :Java=>3, :Swift=>4}
hash_1
=> {:Ruby=>1, :Python=>2, :Java=>3, :Swift=>4}

このように記述すると、元のhash_1、hash_2自体に変更が加えられました。hash_1にすべてマージされ、hash_2は消えました。ハッシュのマージはいずれにしてもシンプルです。

その他のメソッド

ハッシュオブジェクトのマージを紹介しましたが、他にもハッシュオブジェトに対して使えるメソッドはいろいろあります。具体的に挙げていきます。

要素の取得

要素を取得するサンプルコードは以下です。

hash = {ruby:"rails",python:"Django",php:"cakePHP"}
p hash[:ruby]
p hash[:python]
p hash[:go]

これを実行すると、以下のように出力されます。

“rails”
“Django”
nil

キーを指定してバリューを取り出すコードです。キーにrubyを指定するとバリューであるrailsが取得され、キーにpythonを指定するとバリューであるDjangoが取得されました。そして、goというキーはないので、nilが返ってきました。

要素の追加

ハッシュオブジェクトに要素を追加するサンプルコードは以下です。

hash = {ruby:"rails",python:"Django",php:"cakePHP"}
p hash
hash[:java] = "Spring"
p hash

このコードを実行すると以下のように出力されます。

{:ruby=>”rails”, :python=>”Django”, :php=>”cakePHP”}
{:ruby=>”rails”, :python=>”Django”, :php=>”cakePHP”, :java=>”Spring”}

このように、メソッドを使わなくてもhash[:java] = “Spring”という記述で要素を追加することができます。メソッドは使わなくても良いのですが、storeメソッドを使って要素を追加することも可能です。

hash = {ruby:"rails",python:"Django",php:"cakePHP"}
p hash
hash.store(:java,"Spring")
p hash

上記コードを実行すると、以下のようになります。

{:ruby=>”rails”, :python=>”Django”, :php=>”cakePHP”}
{:ruby=>”rails”, :python=>”Django”, :php=>”cakePHP”, :java=>”Spring”}

メソッドを使わないコードの方がシンプルですが、メソッドを使い慣れている方はメソッドを使った形式の方が見やすいかもしれません。

以上、Rubyのハッシュオブジェクトについて解説してきました。本来ハッシュは値とセットで暗号化するためのものですが、Rubyではバリューとキーがある配列のような使い方になっています。

メソッドも簡単に使えるものばかりなので、ぜひ配列のように使いこなしてください。

Rubyのフリーランス案件をチェック

→Rubyの案件情報一覧はこちら

Ruby関連記事
1, Rubyフリーランスの仕事や単価、ruby on railsの在宅案件まで
2, Rubyとは?学習方法や将来性、perlやphp、Pythonの比較はどう?
3, Ruby on RailsでMySQLを使用する際の接続手順
4, あるiOSアプリのエンジニアがRuby on Railsのプロジェクトに加わった話
5, 小学生でも数時間でアプリを作れたRuby on railsの入門書3選
6, 【決定版!】Rubyでできることとは?
7, Ruby開発の新卒採用している会社まとめ
8, Rubyで文字列から数値へ変換する方法まとめ
9, RubyのWebサーバ「puma」を使ってみた感想
10, Rubyでのmecabの使い方を徹底解説します
11, Rubyでハッシュに対する繰り返し処理を行うeachの3つのメソッドの使い方
12, Rubyのyardを使ってソースからドキュメントを生成する方法
13, Rubyでディレクトリ内のファイルを一覧出来るようにする方法
14, Rubyを使ってcsvファイルを読み込む・書き込む方法まとめ
15, MacでRubyの開発環境構築する方法をまとめました
16, サーバーサイド開発言語としてのRubyってどうなの?
17, Rubyで範囲オブジェクトを配列にする方法
18, CentOSサーバにRubyをインストールする方法
19, Rubyを使ってやりたいことから逆引きで使える機能を解説します
20, Rubyでopen uriを使ってWeb上のデータを取得しよう
21, Rubyでハッシュをマージ(結合)する方法まとめ
22, Rubyのrakeの使い方をまとめました
23, Rubyでのtimeクラスの取扱に関してのまとめ

人気記事

編集部おすすめ記事

この記事を読んだ人はこんな記事を読んでいます

案件探しやフリーランスになるための相談する