【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を勉強しているにもかかわらず、そのような現状を抱えてしまうのか、一緒に考えていきましょう。

先が見えない現状を踏まえ、課題として考えられるものは以下のどれかに該当するでしょう。

  • プログラミングの上達が見えない
  • プログラミングを継続できない気がする
  • プログラミングスキルを習得した姿がイメージできない
  • プログラミングスキルを活かした仕事を獲得するイメージができない

これらのどれかに該当することによって、「なんとなくプログラミング学習をしている」という状態になってしまいます。

これらの要因は、三日坊主になる理論と同じなんですが、「プログラミング学習をしなきゃ」とプログラミング学習を頑張ってしまっている状態になってしまっています。

受験勉強をやった経験のある方なら頭がもげるほどに首を縦に振ってしまう方も多いのですが、「今日も5時間勉強するぞ」や「今日はこの章を終わらすぞ」というように、学習を進めることに意識が行き過ぎてしまうと、ある程度学習を継続した後に「先が見えない・・・」となってしまいます。

未来に光を当て、プログラミング学習を「成果が出るもの」にするために

先ほど、「なぜ先が見えないという悩みや不安を抱えてしまうのか」という疑問に対しての答えを示していきました。

これらの課題というのは、独学をしていれば9割の方がぶつかってしまう壁だそうで、いわば、あるあるの現象なのです。

独学をしていて、「なんか前に進めていないぞ」と感じるのはこのせいなんですね。甘く見がちですが、非常にやっかい。

これがさらにやっかいさを極めているのは、上記に挙げた課題のほとんどが、1人で解決できないものばかりだからです。

実は、これらのほとんどが経験者に助けてもらいながら解決しないと、すぐに違う方向へと流れてしまいます。

そう言い切れるのは、以前の私もそうだったからです。

エンジニアやプログラマー関連のキャリアに詳しい方や現役のエンジニアに相談しながら修正を加え、学習を実践して今があります。

そうは言っても、周りにそういう人がいないし・・・

という方もいるでしょう。そういう時にこそ、プログラミングスクールの無料体験レッスンを利用するのです。

営業をかけられて時間の無駄に終わるでしょ?

という考えに辿りついてしまいますよね。結論から言うと弊社では、そういった強引な営業等を行うことはありませんので、安心して受講できます。

「プログラミング学習の先ある未来」を光で明るく照らすには、弊社の無料体験レッスンがぴったりだと断言できます。それくらい無料体験レッスンに自信を持っているのです。

さらに、無料体験レッスンには以下の3大特典もついてきます!

  • 「最短1ヶ月で開発ができる学習方法」電子書籍(非売品)
  • 効率的なオリジナル学習カリキュラム
  • 未経験の転職(フリーランス)を可能にするキャリアサポート

上記の特典だけでも他のスクールにはないポイントだと自信を持っている無料体験レッスン特典です。

ただプログラミング学習をする毎日から、ワクワクしながらプログラミング学習できる毎日に変える体験を一度でいいのでしてみませんか?

無料体験レッスン予約はこちら

まとめ

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

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

LINEで送る
Pocket

最短でエンジニアを目指すなら侍エンジニア塾

cta_under_bnr

侍エンジニア塾は業界で初めてマンツーマンレッスンを始めたプログラミングスクールです。これまでの指導実績は16,000名を超え、未経験から数多くのエンジニアを輩出しています。

あなたの目的に合わせてカリキュラムを作成し、現役エンジニア講師が専属であなたの学習をサポートするため効率よく学習を進めることができますよ。

無理な勧誘などは一切ありません。まずは無料体験レッスンを受講ください。

無料体験レッスンの詳細はこちら

書いた人

長瀬来

長瀬来

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

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

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

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

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

趣味は語学、読書です。

おすすめコンテンツ

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

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