0
0

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 3 years have passed since last update.

ハッシュの便利メソッド

Posted at

ハッシュとは

キーと値の組み合わせでデータを管理するオブジェクト

よく使用されるハッシュのメソッド

  • keys
  • value
  • has_key?
  • dig
  • values_at

keys

ハッシュのキーを配列として返す

currencies = { japan: 'yen', us: 'dollar', india: 'rupee' }
currencies.keys
=> [:japan, :us, :india]

values

ハッシュの値を配列として返す 

currencies = { japan: 'yen', us: 'dollar', india: 'rupee' }
currencies.values
=> ["yen", "dollar", "rupee"]

has_key?

ハッシュの中に指定されたキーが存在するか確認できる

currencies = { japan: 'yen', us: 'dollar', india: 'rupee' }
currencies.has_key?(:us)
=> true
currencies.has_key?(:germany)
=> false

values_at

ハッシュのキーに対応する値を配列として返す
対応するキーが無かったら、nilを返す

currencies = { japan: 'yen', us: 'dollar', india: 'rupee' }
currencies.values_at(:japan, :india, :canada)
=> ["yen", "rupee", nil]

dig

ネストしたハッシュから安全に値を取り出すことが出来る

order = {
  payments: {
    payment_method: {
      name: 'credit card'
    }
  }
}

nameの値を取り出した場合は、以下のように取り出せる

order[:payments][:payment_method][:name]
=> "credit card"

何らかの理由でpayment_methodの情報が入ってなかったとして、先程と同じようにnameの値を取得しようとするとエラーが発生する

other_order = {
  payments: {
    #payment_methodが存在しない
  }
}

other_order[:payments][:payment_method][:name]
NoMethodError (undefined method `[]' for nil:NilClass)

このような場合にdigメソッドを使用すると、キーが見つからなくてもnilが返るようになる

order.dig(:payments, :payment_method, :name)
=> "credit card"
other_order.dig(:payments, :payment_method, :name)
=> nil

digメソッドは配列やハッシュが混在していても使用できる

all_order = [
  {
    payments: {
        payment_method: {
            name: 'credit card'
        }
    }
  },
  {
    payments: {
        payment_method: {
          # payment_method情報が存在しない
        }
    }
  },
  {
    payments: {
        payment_method: {
            name: 'cash'
        }
    }
  }
]

all_order.dig(0, :payments, :payment_method, :name)
=> "credit card"
all_order.dig(1, :payments, :payment_method, :name)
=> nil
all_order.dig(2, :payments, :payment_method, :name)
=> "cash"

参考

プログラミング言語 Ruby リファレンスマニュアル
プロを目指す人のためのRuby入門

0
0
2

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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?