ハッシュとは
Key(キー)とValue(バリュー)の組み合わせで関連付けを行うことができるオブジェクトです。
user1 = {id: 1, name: 'Tom'} => { :id => 1, :name => "Tom" }
user2 = {id: 1, name: 'Bob'} => { :id => 1, :name => "Bob" }
user1[:name] => "Tom"
user2[:name] => "Bob"
Key
をシンボル:
で定義した場合・・・変数 = { key: value, key: value, ... }
user1 = {id: 1, name: 'Tom'} => { :id => 1, :name => "Tom" }
# シンボルで定義した Key を String で指定した場合、値を参照することはできない。
user1['name'] => nil
user3 = { 'id' => 3, 'name' => 'Jon' } => {"id"=>3, "name"=>"Jon"}
user3['name'] => "Jon"
上記のように、key
を 文字列で表す場合、key
を String
で定義する必要があります。
多次元ハッシュ
ハッシュのvalue
にさらにネストされたハッシュが格納されている階層構造のハッシュを指します。
user4 = {
id: 4,
name: 'Smith',
test_results: {
math: 70,
science: 80
}
} => {:id=>4, :name=>"Smith", :test_results=>{:math=>70, :science=>80}}
user4[:test_results][:math] => 70
user4[:test_results][:math] = 100
user4 => {:id=>4, :name=>"Smith", :test_results=>{:math=>100, :science=>80}}
Key
の配列を取得する場合
# 該当要素のみ取得する場合
user4.key("Smith")
=> name
# 全て取得する場合
user4.keys
=> [:id, :name, :test_results]
value
の配列を取得する場合
# 該当要素のみ取得する場合
user4["name"]
=> ["Smith"]
# 全て取得する場合
user4.values
=> [4, "Smith", {:math=>100, :science=>80}]
eachメソッド
で hashメソッド
を繰り返し処理する場合
user4 => {:id=>4, :name=>"Smith", :test_results=>{:math=>100, :science=>80}}
user4.each do |k, v|
puts "#{k} = #{v}"
end
# 出力結果
# id = 4
# name = Smith
# test_results = {:math=>100, :science=>80}
|k, v|
は |key, value|
を省略した記述です。
key
と value
を削除する場合
deleteメソッド
の第一引数に削除対象のkey
を渡すことで削除できます。
user4.delete(:test_results) => {:math=>100, :science=>80}
user4 => {:id=>4, :name=>"Smith"}
参考教材