digメソッドとは


digメソッドとは

digメソッドとは、配列とハッシュから安全に値を取り出すことができるメソッド。

安全にとはどういうことか、それはdigメソッドを使用して値を取得する場合、エラーは発生せずnilを返してくれる。
これが配列とハッシュから安全に値を取り出すことができる理由。

# digメソッドを用いて値を取得する場合

# 存在しないmusic、rockを取得しようとする
users.dig(1, :profile, :hobbys, :music, :rock)
=> nil

配列の場合

以下のような配列があると仮定し、digメソッドを用いてそれぞれの値を取り出してみる。

digメソッドの引数に取得したい値のindexを指定していくことで値を取り出すことができる。

fruits = [[ "apple",[ "banana", "grape" ]]]

# appleを取得する
fruits.dig(0, 0)
=> "apple"

# bananaを取得する
fruits.dig(0, 1, 0)
=> "banana"

# grapeを取得する
fruits.dig(0, 1, 1)
=> "grape"

ハッシュの場合

以下のようなハッシュがあると仮定し、digメソッドを用いてそれぞれの値を取り出してみる。digメソッドの引数に取得したい値のキーを指定していくことで値を取り出すことができる。

users =
{
  name: {
    first_name: '太郎',
    last_name: '田中'
  },
  age: 25
}

# ageを取得
users.dig(:age)
=> 25

# first_nameを取得
users.dig(:name, :first_name)
=> "太郎"

# last_nameを取得
users.dig(:name, :last_name)
=> "田中"

配列とハッシュの入れ子構造の場合

以下のような配列とハッシュの入れ子構造があると仮定し、digメソッドを用いてそれぞれの値を取り出してみる。配列とハッシュの場合同様、それぞれindexもしくはキーを指定することで取得することができる。

users =
[
  "佐藤",
  profile: {
    age: 30,
    hobbys: {
      sports: "サッカー",
      manga: "ワンピース"
    }
  }
]

# nameを取得
users.dig(0)
=> "佐藤"

# ageを取得
users.dig(1, :profile, :age)
=> 30

# sportsを取得
users.dig(1, :profile, :hobbys, :sports)
=> "サッカー"

# mangaを取得
users.dig(1, :profile, :hobbys, :manga)
=> "ワンピース"

参考記事

【Rails】配列・ハッシュから安全に値を取り出すことができるdigメソッドについて