今回はRubyのHashオブジェクトについての学習方法について解説していきます。
Hashオブジェクトとはキー(key)とバリュー(value)の組み合わせでデータを表現出来るオブジェクトです。
Hashオブジェクトの宣言
基本は中括弧を使って以下のように宣言できます。
[1] pry(main)> user1 = { name: '太郎'}
=> {:name=>"太郎"}
[2] pry(main)> user2 = { id: 2, name: '花子' }
=> {:id=>2, :name=>"花子"}
Hashオブジェクトの参照
以下のようにコロン「:」+キーでバリューを参照できます。
[3] pry(main)> user1[:name]
=> "太郎"
[4] pry(main)> user2[:id]
=> 2
[5] pry(main)> user2[:name]
=> "花子"
# キーをStringで指定しても参照できない
[6] pry(main)> user1['name']
=> nil
キーをStringで宣言する方法
上記の例ではキーをStringで指定しても参照できていませんでしたが、明示的にキーをStringで宣言するとStringで参照可能になります。
[7] pry(main)> user3 = { 'id' => 3, 'name' => '三郎' }
=> {"id"=>3, "name"=>"三郎"}
[8] pry(main)> user3['name']
=> "三郎"
[9] pry(main)> user3['id']
=> 3
Hashオブジェクトの階層構造
以下のように階層構造を宣言することができます。
[10] pry(main)> user4 = {
[10] pry(main)* name: '四郎',
[10] pry(main)* test_result: {
[10] pry(main)* math: 90,
[10] pry(main)* science: 80
[10] pry(main)* }
[10] pry(main)* }
=> {:name=>"四郎", :test_result=>{:math=>90, :science=>80}}
# 階層構造への参照
[12] pry(main)> user4[:test_result][:math]
=> 90
Hashオブジェクトの階層構造の書き換え
階層構造のバリューを書き換える際は以下のように記載できます。
[13] pry(main)> user4[:test_result][:math] = 95
=> 95
[14] pry(main)> user4
=> {:name=>"四郎", :test_result=>{:math=>95, :science=>80}}
キー、バリューごとの配列の取得
keysメソッドとvaluesメソッドで取得できます。
[15] pry(main)> user4.keys
=> [:name, :test_result]
[16] pry(main)> user4.values
=> ["四郎", {:math=>95, :science=>80}]
Hashオブジェクトのeach文
ブロックに2つの値が渡され、一つ目の値がキー(以下の例では「k」)、二つ目の値がバリュー(以下の例では「v」)になります。
[17] pry(main)> user4.each do |k, v|
[17] pry(main)* puts "#{k} = #{v}"
[17] pry(main)* end
name = 四郎
test_result = {:math=>95, :science=>80}
=> {:name=>"四郎", :test_result=>{:math=>95, :science=>80}}
キー、バリューの削除
deleteメソッドを使うことでキー、バリューを削除することができます。
[18] pry(main)> user4.delete(:test_result)
=> {:math=>95, :science=>80}
[19] pry(main)> user4
=> {:name=>"四郎"}
コメント