Hash
オブジェクトが1つである配列に対して、オブジェクトが「キー」と「バリュー」の2つであることが特徴。
fruits = {"apple": "100円", "orange": "80円", "melon": "500"}
p fruits
【実行結果】
{:apple=>"100円", :orange=>"80円", :melon=>"500"}
上記のコードではapple,orengeが「キー(key)」、100円、80円が「バリュー(value)」にあたる。
ハッシュの利点としてはapple=>"100円"
の様に各要素に意味やつながりをつけることができる。
Hashの基本機能
Hashの要素を取得する
hash = {ruby:"rails",python:"Django",php:"cakePHP"}
p hash[:ruby]
【実行結果】
"rails"
fetchメソッドでバリューを取り出す
hash = {ruby:"rails",python:"Django",php:"cakePHP"}
p hash.fetch(:ruby)
【実行結果】
"rails"
Hashに要素を追加
hash = {ruby:"rails",python:"Django",php:"cakePHP"}
p hash
hash[:java] = "Spring"
p hash
【実行結果】
{:ruby=>"rails", :python=>"Django", :php=>"cakePHP"}
{:ruby=>"rails", :python=>"Django", :php=>"cakePHP", :java=>"Spring"}
Hashのサイズを取得する
hash = {ruby:"rails",python:"Django",php:"cakePHP"}
【実行結果】
p hash.size
p hash.length
Hashの要素を削除
hash = {ruby:"rails",python:"Django",php:"cakePHP"}
p hash
hash.delete(:ruby)
p hash
【実行結果】
{:ruby=>"rails", :python=>"Django", :php=>"cakePHP"}
{:python=>"Django", :php=>"cakePHP"}
■delete_if、rejectメソッドを使用することで条件を設定して要素を削除できる
hash = {ruby:"rails",python:"Django",php:"cakePHP"}
p hash
hash.delete_if{|key,value| value.size == 6}
p hash
hash.reject!{|key,value| value.size == 7}
p hash
【実行結果】
{:ruby=>"rails", :python=>"Django", :php=>"cakePHP"}
{:ruby=>"rails", :php=>"cakePHP"}
{:ruby=>"rails"}
なお、rejectは!をつけないと破壊的メソッドにはなりません。
Hashの結合
hash1 = {ruby:"rails",php:"cakePHP"}
hash2= {python:"Django",java:"Spring"}
hash3= hash1.merge(hash2)
p hash3
【実行結果】
{:ruby=>"rails", :php=>"cakePHP", :python=>"Django", :java=>"Spring"}
Hashの便利なメソッド
find:Hashの要素を検索する
fruits = { "apple" => 100, "orange" => 80, "melon" => 500 }
p fruits.find {|k,v| k == "apple"}
【実行結果】
["apple", 100]
sort:Hashの要素をソートする
h = { "def" => 2, "ghi" => 1, "abc" => 3 }
p h.sort
p h
【実行結果】
[["abc", 3], ["def", 2], ["ghi", 1]]
{"def"=>2, "ghi"=>1, "abc"=>3}
ハッシュのキーで昇順でソートしたい場合は上記の様に記載する。
each:一括で値を取り出す
hash = { Samurai: 1, Ruby: 2, Rails: 3 , Swift: 4, Java: 5, PHP: 6}
hash.each { |key, value| puts "#{key} => #{value}"}
【実行結果】
Samurai => 1
Ruby => 2
Rails => 3
Swift => 4
Java => 5
PHP => 6