6
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

ハッシュの基本【Ruby超入門】

Last updated at Posted at 2019-04-28

ハッシュ

ハッシュは複数のデータをまとめて格納できるオブジェクト。
配列と似ているが、「キー」と「値」のセットで複数のデータを扱う。

ハッシュは「キー」を指定することでその「値」を取り出すことができる。

  • ハッシュは{}の中にカンマ区切りで「キー」と「値」の組を複数書いていく。
  • 「キー」の後に=>(ハッシュロケット)を書き、それに続いて「値」を記述する。
  • ハッシュの「キー」と「値」はシンボルにできる。
  • シンボルが「キー」になる場合は=>を省略できるが、:が前後入れ変わる記述となる。
  • 中身が無い場合は空のハッシュができる。
  • 「キー」と「値」には種類の違うオブジェクトを入れられる。
  • 他の言語では連想配列などと呼んだりする。
{'japan' => 'yen', 'us' => 'dollar', 'india' => 'rupee'}

# 「キー」をシンボルにして「=>」を省略
{japan: 'yen', us: 'dollar', india: 'rupee'}

# 「値」もシンボルにできる
{japan: :yen, us: :dollar, india: :rupee}

関連記事
シンボルとは!?【Ruby超入門】
配列の基礎的なメソッド集【Ruby超入門】

ハッシュの基本的な使い方

「キー」と「値」を追加

currencies = {'japan' => 'yen', 'us' => 'dollar', 'india' => 'rupee'}
# イタリアの通貨を追加する
currencies['italy'] = 'euro'
p currencies
# => {'japan' => 'yen', 'us' => 'dollar', 'india' => 'rupee', 'italy' => 'euro'}

変数currenciesの「キー」'italy'に「値」euroを代入するようなイメージ。

追加した「キー」と「値」の組は末尾に追加されるが、ハッシュでは「キー」を指定して「値」を代入したり取得したりする使い方が多いため、順番を意識することはあまりない。

また、すでに存在する「キー」を指定した場合は「値」が上書きされる。

currencies = {'japan' => 'yen', 'us' => 'dollar', 'india' => 'rupee'}
# すでに存在するjapanを指定
currencies['japan'] = '円'
p currencies
# => {'japan' => '円', 'us' => 'dollar', 'india' => 'rupee'}

ハッシュから「値」を取り出す

currencies = {'japan' => 'yen', 'us' => 'dollar', 'india' => 'rupee'}
puts currencies['japan']  #=> yen

配列では[n]というようにn番目の要素取り出していたが、ハッシュではインデックス番号ではなく「キー」を指定することで、組となっている「値」を取得する。

存在しない「キー」を指定するとnilを返す。

currencies = {'japan' => 'yen', 'us' => 'dollar', 'india' => 'rupee'}
puts currencies['italy']  #=> nil

ハッシュから「キー」と「値」の組を削除

ハッシュから「キー」と「値」の組を削除するときはdeleteメソッドを使う。
また、戻り値は削除された要素の「値」となり、指定した「キー」がなければnilを返す。

currencies = {'japan' => 'yen', 'us' => 'dollar', 'india' => 'rupee'}
puts currencies.delete('japan')  #=> yen
p currencies
# =>  {'us' => 'dollar', 'india' => 'rupee'}

puts currencies.delete('japan')  #=> nil

要素数の取得

sizeメソッドを使うとハッシュの要素の個数を調べることができる。

puts {}.size  #=> 0
puts {'x' => 1, 'y' => 2, 'z' => 3}.size  #=> 3

ハッシュを使った繰り返し処理

eachメソッドを使うと「キー」と「値」の組み合わせを格納した順に取り出すことができる。
ブロック引数が「キー」と「値」で2個になっている点に注意する。

currencies = {'japan' => 'yen', 'us' => 'dollar', 'india' => 'rupee'}

currencies.each do |key, value|
  puts "#{key}:#{value}"
end
実行結果
japan:yen
us:dollar
india:rupee

ブロック引数を1つにすると「キー」と「値」が配列に格納される。

currencies = {'japan' => 'yen', 'us' => 'dollar', 'india' => 'rupee'}

currencies.each do |key_value|
  key = key_value[0]
  value = key_value[1]
  puts "#{key}:#{value}"
end
実行結果
japan:yen
us:dollar
india:rupee

ハッシュの同値比較

==でハッシュ同士を比較すると、同じハッシュかどうかをチェックできる。
すべての「キー」と「値」が同じであればtrueが返る。

また、並び順が異なっていてもすべての「キー」と「値」が同じであればtrueが返る。

a = {'x' => 1, 'y' => 2, 'z' => 3}

b = {'x' => 1, 'y' => 2, 'z' => 3}
puts a == b  #=> true

c = {'z' => 3, 'x' => 1, 'y' => 2}
puts a == c  #=> true

d = {'x' => 1, 'y' => 20, 'z' => 3}
puts a == d  #=> false

参考書

6
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?