【Ruby入門】Hash(ハッシュ)の使い方 (each fetch find select)

Hash(ハッシュ)の概念は初学者の方にとって馴染みがなく、詰まりやすいポイントでもあります。Hashを使っていると、以下のような問題に直面することがあります。

Hashのサイズや要素を追加する方法が知りたい
Hashを結合する方法が知りたい
Hashの要素を検索、並び替えを行いたい

そこでこの記事では、Rubyのハッシュ(hash)について以下の内容を解説していきます。

  • 【基礎】そもそもHash(ハッシュ)とは?
  • 【基礎】Hash(ハッシュ)の要素を取得する
  • 【基礎】Hash(ハッシュ)に要素を追加する
  • 【基礎】Hash(ハッシュ)のサイズを取得する(size,length)
  • 【基礎】Hash(ハッシュ)の要素を削除する
  • 【基礎】Hash(ハッシュ)を結合する
  • 【発展】Hash(ハッシュ)のfindメソッド
  • 【発展】Hash(ハッシュ)のsortメソッド
  • 【発展】Hash(ハッシュ)のeachメソッド

Hashの基本から応用までわかりやすく解説していますので、ぜひ参考にしてください。

そもそもHash(ハッシュ)とは?

shutterstock_229910752

画像:shutter stock

配列は一つの要素にオブジェクトが一つ入っていたのに対して、ハッシュはオブジェクトがキーとバリューの二つ入っているのが特長です。たとえば、フルーツの名前と値段をそれぞれハッシュに格納してみましょう。

実行結果:

このように一つの要素に二つのオブジェクトが格納されていることがわかります。

  • apple,、orangeなどの部分を「キー(key)」
  • 100円、80円などの部分を「バリュー(value)」

とそれぞれ呼ぶのでそれぞれ覚えておくようにしましょう!ハッシュの利点はapple ⇢ 100円のように、各要素に意味やつながりをもたせることができるという点にあります。そのため、キーと値をペアで関連付けたい時にハッシュはとても重宝します!

また、この他にも色々な場面でハッシュ利用されているのでRubyを書く上で必ず必要な知識といっても過言ではありません!

Rubyのハッシュについては、以下の記事でも基本を詳しく解説してありますので、一読されることをおすすめします。


【完全網羅】ruby hash 初期化方法まとめ
更新日 : 2017年2月22日

Hash(ハッシュ)の基本的な使い方

Hash(ハッシュ)の要素を取得する

ハッシュ[設定したキー]で取り出す

それでは、まずはハッシュ[設定したキー]で要素を取得する方法からみていきましょう。

[実行結果]

基本的にはハッシュ[設定したキー]でキーとセットになっているバリューを取り出すことができます。:rubyに対して”rails”が、:pythonに対して”Django”がそれぞれ結果として返ってきていることを確認できます。

また、注目すべきは最後のnilです。hash[:go]でパリューを取り出そうとしていますが、:goは設定されていません。ハッシュ[設定したキー]の形式で設定されていないキーでバリューを取り出そうとするとnilが返ってくるようになっています。

fetchメソッドを使ってを取り出す

ハッシュ[設定したキー]で、バリューを取り出せますが、fetchメソッドを使っても取り出すことができます。

[実行結果]

このようにハッシュ.fetch(設定したキー)の形式でパリューを取り出せます。これはさきほどの場合となんら変わりありません。ここで注目すべきはKeyErrorの部分です。fetchでは、キーが設定されていない場合例外を返すようになっています。

なので、例外処理をしやすいようになっています。また、fetchメソッドでは最後の出力では設定されていないキーに対して、デフォルトのバリューを設定できます。このようにバリューを設定しておけば、もしもキーが設定されていなかった場合にも例外ではなく設定したバリューを返すことができます。

Hash(ハッシュ)に要素をを追加する

次にハッシュに要素を追加する方法を解説します。基本的にはハッシュ[:新しいキー] = 新しいバリューの形式で値を追加することができます。

[実行結果]

このように、新しく:javaのキーで”Spring”のバリューが追加されていることを確認できます。また、storeメソッドを使っても同様に追加することもできます。

[実行結果]

storeメソッドはエイリアス(名前は違っても機能は同じ)なので、使いやすいほうを使いましょう。

Hash(ハッシュ)のサイズを取得する(size,length)

ハッシュの要素の数を取得するにはsize、またはlengthメソッドを使用します。

[実行結果]

このように、始めは3が返ってきて、:swift、”perfect”を追加したので、その後は4が返ってきています。

Hash(ハッシュ)の要素を削除する

基本的な要素の削除はdeleteメソッドを使用します。

[実行結果]

このように、ハッシュ.delete(削除したい要素のキー)の形式で簡単に削除できます。また、delete_ifかrejectメソッドを使えば、条件を設定して要素を削除することができるので、とても便利です。

[実行結果]

value.sizeで文字の数を取得しています。sizeはハッシュの要素の数を数えることもできますが、Stringの文字数を数えることもできます。”Django”は6文字で、”cakePHP”は7文字なのでそれぞれ削除されました。

delete_ifとrejectですが、両者には微妙に違いがあります。まずdelete_ifは!をつけなくても破壊的メソッドですが、rejectは!をつけないと破壊的メソッドではありません。(破壊的メソッドとはレシーバー自体に変更を加えるメソッドのことです。)

また、delete_ifは条件になにも引っかからなかった時に、そのままレシーバーを返しますが、reject!はnilを返します。一見同じようなメソッドでも、微妙に挙動が違うので覚えておいてください。

Hash(ハッシュ)を結合する

ハッシュを結合するにはmergeメソッドを使用します。

[実行結果]

このように、mergeメソッドは非常に直感的ですね。hash3にはhash1とhash2の要素が詰め込まれています。

Hash(ハッシュ)の便利なメソッド

Hash(ハッシュ)にまつわるメソッドをまとめてみました。基本的なメソッドを理解した後は、いざという時に適切にメソッドが使えるように様々なメソッドを頭にいれておきましょう。

find:ハッシュの要素を検索する

ハッシュでキーや値を指定して検索したい場合はfindメソッドを使用します。たとえば、ハッシュでキーが”apple”の要素が存在するか検索する場合は以下のように記述します。

[実行結果]

このようにキー”apple”に一致したハッシュの要素を取得できました!findメソッドの詳しい使い方については、以下の記事を参考にしてください!

sort:ハッシュの要素をソートする

ハッシュの要素を昇順や降順で並び替えたい場合はsortメソッドを使用します。たとえば、ハッシュのキーで昇順にsortしたい場合は以下のように記述します。

[実行結果]

このようにハッシュのキーでソートできることがわかりますね!sortメソッドの詳しい使い方については以下の記事を参考にしてください!

each:一括で値を取り出す

ハッシュからさまざまな方法で値を取り出したい場合はeachメソッドを使用します。たとえば、ハッシュのキーと値を1つずつ取り出したい場合は以下のように記述します。

[実行結果]

このようにfor文のループで要素を1つずつ取り出すような処理が、eachメソッドを使用すれば簡単にできます。eachメソッドの詳しい使い方については以下の記事を参考にしてください!

【Ruby eachの応用編】さまざまな使い方を網羅的に理解しよう
更新日 : 2019年4月12日

まとめ

今回はRubyのハッシュについてまとめていきました。Rubyでは配列よりハッシュの方が好んで使用されることが多く、配列より自由度が高いのも特長です。ハッシュは初心者の人がつまづきやすいポイントでもあるのでしっかりと復習してください。

また、基本を理解した後は関連記事をとことん読んでHash(ハッシュ)を完全にマスターしましょう。

Rubyカリキュラム無料公開中!

この記事はRuby入門完全攻略ガイド【基礎学習/アプリ開発/仕事獲得】の一部になります。このカリキュラムは、プログラミング入門者が、基礎学習からアプリ開発、さらには仕事獲得まで体系的に学べる内容となっています。

Ruby学習に必要な情報を一つにまとめていますので効率よくRubyを学ぶことが出来ます。この機会に是非活用していただければと思います。

【Ruby入門ガイド】アプリ開発で知っておくべき知識を総ざらい
更新日 : 2018年11月23日

Rubyを最短で習得したい方へ

近年では様々なWEBサービスが流通するようになりました。

WEBサービスの普及が進むにつれて、それらを素早く開発するのに長けたRubyの人気は今後さらに増し、Rubyエンジニアの需要も自ずと増えることは間違いなしでしょう。

元々ITリテラシーの高い方や他言語を習得している方であれば、独学でRubyを習得することが可能です。

ただし、プログラミング学習をしている方の多くは

「自分に合った教材が見つけられずに挫折してしまった」
「勉強のための勉強になってしまい、ゴールが見えない」
「情報が少なくどう調べればいいかわからない」
「エラーを解決するのに何日もかかってしまう」

このような悩みを抱えたまま挫折してしまうのが現実となっています。

  • もう挫折したくない
  • 本業と両立しながら、好きな時間で自分のペースで勉強を続けていきたい
  • 自分だけのカリキュラムで効率的に勉強したい
  • WEBアプリケーション開発までしっかりサポートして欲しい
そんな方はお気軽に侍エンジニア塾までご相談ください。

お一人お一人に専属のインストラクターがつくので、初心者の方がつまづきがちな、「CookPad」、「Wantedly」、「食べログ」のようなWEBアプリケーション開発方法もスムーズに学習することできます。

実際にオリジナルWEBアプリを開発し、成果物として認められて仕事獲得に成功した塾生は数多くいます。

このように、オリジナルアプリ開発から仕事獲得まで徹底的にサポートすることでプログラミング初心者の方でも安心して基礎学習に取り組むことができます。

まずは『無料体験レッスン』で、弊社のコンサルタントと一緒にあなた専用の学習方法やカリキュラムを考えてみませんか?

Rubyならではの学習方法や、現役フリーランスRubyエンジニアから貴重なアドバイスを受けることができます。

詳しくは下の画像から弊社サービス内容をご確認ください。

ruby_a2
LINEで送る
Pocket

書いた人

長瀬来

長瀬来

Unityを使ったiOSアプリのリリース、フリマサイト運営の経験があります。

経験した言語はC、C#、Javascript、R、Python、Ruby、PHPなど

言語が好きで、英語や中国、ドイツ語を勉強しました。
将来的には海外で生活したいです。

現在はRuby on Rails5やCocos2dxの勉強を主にしています。

ライターとしては
できるだけ初心者にわかりやすい文章になるように心がけています。

趣味は語学、読書です。

おすすめコンテンツ

あなたにぴったりなプログラミング学習プランを無料で診断!

プログラミング学習の効率を劇的に上げる学習メソッドを解説