Ruby 〜Hashオブジェクト覚書〜

Hashオブジェクトについて

Hashオブジェクトはキーとバリューの組み合わせでデータ表現できるオブジェクト
通常Hashオブジェクトを使うには{}中括弧を使う。

irb(main):011:0> user1 = { name:'一郎'}
=> {:name=>"一郎"}
irb(main):012:0> user2 = { id: 2 ,name: '二郎'}
=> {:id=>2, :name=>"二郎"}
irb(main):013:0> 

Hashオブジェクトから任意の値を取り出す方法

=> {:id=>2, :name=>"二郎"}
irb(main):013:0> user1[:name]
=> "一郎"
irb(main):014:0> user2[:name]
=> "二郎"
irb(main):015:0> user2[:id]
=> 2
irb(main):016:0> 

ただし上記書き方だとキーをString型で指定できないの注意が必要。

irb(main):016:0> user1['name']
=> nil
irb(main):017:0> 

キーをStringで書きたい場合は次のように書く。

irb(main):017:0> user3 = { 'id'=>3,'name'=>'三郎'}
=> {"id"=>3, "name"=>"三郎"}
irb(main):018:0> user3['id']
=> 3
irb(main):019:0> user3['name']
=> "三郎"
irb(main):020:0> 

階層構造でHashオブジェクトの作成について

irb(main):021:0> user4 = {
irb(main):022:1*  name: '四郎',
irb(main):023:1*  test_results: {
irb(main):024:2*   math: 70,
irb(main):025:2*   science: 80
irb(main):026:2>  }
irb(main):027:1> }
=> {:name=>"四郎", :test_results=>{:math=>70, :science=>80}}
irb(main):028:0> user4[:test_results][:math]
=> 70
irb(main):029:0> 

値の書き換えについて

irb(main):032:0> user4[:test_results][:math] = 90
=> 90
irb(main):033:0> user4
=> {:name=>"四郎", :test_results=>{:math=>90, :science=>80}}
irb(main):034:0> 

keys/valuesメソッドについて

Hashオブジェクトではkeysメソッドでキーの配列を取得でき、valuesメソッドで値の配列を取得できる

irb(main):034:0> user4.keys
=> [:name, :test_results]
irb(main):035:0> user4.values
=> ["四郎", {:math=>90, :science=>80}]
irb(main):036:0> 

Hashオブジェクトでのeachメソッドの使い方

irb(main):040:0> user4.each do | k,v|
irb(main):041:1*  puts "#{k} = #{v}"
irb(main):042:1> end
name = 四郎
test_results = {:math=>90, :science=>80}
=> {:name=>"四郎", :test_results=>{:math=>90, :science=>80}}
irb(main):043:0> 

一部のキーやバリューの値削除について

deleteメソッドで第一引数に削除対象のキーを指定する

irb(main):044:0> user4.delete(:test_results)
=> {:math=>90, :science=>80, :name=>90}
irb(main):045:0> user4
=> {:name=>"四郎"}
irb(main):046:0>