Webサイト制作コースのお申し込みはこちら Webサイト制作コースのお申し込みはこちら

【Ruby入門】ハッシュとシンボルの基本」にて、ハッシュの基本を解説しました。そこで本記事ではそれに続き、より実践的なハッシュの使い方について解説します。

ハッシュに値をセットしたあと、それをどう使うか(つまりどうやって取り出すか)が問題となります。

ハッシュもオブジェクトです。となると、配列と同じようにハッシュもeachメソッドが使えます。ハッシュ.eachで取り出すことが可能です。本記事ではその方法を解説します。

その他、本記事ではハッシュから配列とその逆への変換ハッシュの入れ子(ハッシュの中にハッシュ)ハッシュの便利な表示方法を解説します。

なお、一般的にハッシュのキーにはシンボルを使います。本記事でもそれに従い、キーはすべてシンボルを使います。シンボルとは何?とお忘れの方は、冒頭のリンクより前の記事を開き、読みなおすことをおすすめします。

ハッシュをeachで取り出す

冒頭でふれたように、配列で出てきたeachですが、ハッシュにも使えます。

[書式]

ハッシュ.each do | key, value |
    (keyとvalueを使った何らかの処理)
end

配列のeachと異なり、キーと値を取り出さなくてはいけないので、ブロック変数はkeyとvalueの2つになります。

hash = {user1: "ユーザー1", user2: "ユーザー2"}
hash.each do |key, value|
    puts "key:" + key.to_s + " value:" + value
end

[実行結果]

key:user1 value:ユーザー1
key:user2 value:ユーザー2

ブロック変数「|key, value|」で取り出せるのですが、putsで表示するときは文字列に変換しなくてはなりません。よって上記プログラムではキーに.to_sメソッドを使って文字列に変換しています。

今度は、式展開を使って内容を表示させてみましょう。

hash = {user1: "ユーザー1", user2: "ユーザー2"}
hash.each do |key, value|
    puts "key: #{key} value: #{value}"
end

先ほどと同じ結果が得られます。

式展開を使うとto_sが必要ないことも注目してください。

キーを指定して削除する

要素を削除するときは、deleteを使います。

hash = {user1: "ユーザー1", user2: "ユーザー2"}
hash.delete(:user1)
puts hash

[実行結果]

{:user2=>"ユーザー2"}

:user1を削除できました。

条件を指定して削除することも可能です。

hash = {user1: "ユーザー1", user2: "ユーザー2"}
puts hash.delete_if{|key, value| key == :user1}

[実行結果]

{:user2=>"ユーザー2"}

条件をブロックで渡して、満たすものだけ削除できました。

ハッシュから配列、その逆

to_aメソッドやto_hメソッドを使い、ハッシュから配列、配列からハッシュへ相互に変換する方法を解説します。

まずはハッシュから配列への変換です。

hash = {user1: "ユーザー1", user2: "ユーザー2"}
p hash.to_a

[実行結果]

[[:user1, "ユーザー1"], [:user2, "ユーザー2"]]

一体何が起こったのかお分かりでしょうか?

1つの大きい配列に、2つの小さい配列が入れ子で入っています。つまり、ハッシュのキーと値をセットとした、1つの小さな配列になっています。

ハッシュを配列にできるのなら、逆の考え方もできますよね。

つまり、配列の入れ子をハッシュにできそうです。

やってみましょう。

array = [[:user1, "ユーザー1"], [:user2, "ユーザー2"]]
p array.to_h

[実行結果]

{:user1=>"ユーザー1", :user2=>"ユーザー2"}

先ほどの実行結果をそのまま使い配列を作成し、to_hメソッドでハッシュ化できました。

ハッシュの中にハッシュ

もっと複雑なハッシュを見てみましょう。ハッシュの中にハッシュを入れることも可能です。

例えば、以下のような構成を考えます。

人事:HR
  社員1(emp1) 田中(tanaka)
  社員2(emp2) 佐藤(sato)

販売:SL
  社員3(emp3) 鈴木(suzuki)
  社員4(emp4) 高橋(takahashi)

これをハッシュで実装します。

hash = {
    HR: {
        emp1: "tanaka",
        emp2: "sato"
    },

    SL: {
        emp3: "suzuki",
        emp4: "takahashi"
    }
}

puts hash

[実行結果]

{:HR=>{:emp1=>”tanaka”, :emp2=>”sato”}, :SL=>{:emp3=>”suzuki”, :emp4=>”takahashi”}}

ハッシュを多重で定義できました。

ppメソッド

ハッシュが複雑になると、putsメソッドやpメソッドで表示させても見づらいです。そんなときはppメソッドを使うと便利です。

先ほどの例を使います。

require "pp"

hash = {
    HR: {
        emp1: "tanaka",
        emp2: "sato"
    },

    SL: {
        emp3: "suzuki",
        emp4: "takahashi"
    }
}

pp hash

[実行結果]

{:HR=>{:emp1=>"tanaka", :emp2=>"sato"},
 :SL=>{:emp3=>"suzuki", :emp4=>"takahashi"}}

ちょっとだけ見やすくなりました。

まとめ

本記事では、ハッシュの応用的な使い方を解説しました。

ぜひハッシュの考え方をマスターし、配列とハッシュのいずれを使うのか適切な判断ができるようになってくださいね!

エンジニアになりたい人に選ばれるプログラミングスクール「ポテパンキャンプ 」

ポテパンキャンプは卒業生の多くがWebエンジニアとして活躍している実践型プログラミングスクールです。 1000名以上が受講しており、その多くが上場企業、ベンチャー企業のWebエンジニアとして活躍しています。

基礎的な学習だけで満足せず、実際にプログラミングを覚えて実践で使えるレベルまで学習したいという方に人気です。 プログラミングを学習し実践で使うには様々な要素が必要です。

それがマルっと詰まっているポテパンキャンプでプログラミングを学習してみませんか?

卒業生の多くがWebエンジニアとして活躍

卒業生の多くがWeb企業で活躍しております。
実践的なカリキュラムをこなしているからこそ現場でも戦力となっております。
活躍する卒業生のインタビューもございますので是非御覧ください。

経験豊富なエンジニア陣が直接指導

実践的なカリキュラムと経験豊富なエンジニアが直接指導にあたります。
有名企業のエンジニアも多数在籍し品質高いWebアプリケーションを作れるようサポートします。

満足度高くコスパの高いプログラミングスクール「ポテパンキャンプ」

運営する株式会社ポテパンは10,000人以上のエンジニアのキャリアサポートを行ってきております。
そのノウハウを活かして実践的なカリキュラムを随時アップデートしております。

代表の宮崎もプログラミングを覚えサイトを作りポテパンを創業しました。
本気でプログラミングを身につけたいという方にコスパ良く受講していただきたいと思っておりますので、気になる方はぜひスクール詳細をのぞいてくださいませ。