2019/09/18_9月になってもガリガリ君(ruby_digメソッド)
今日もrubyの知らないメソッドと出会ったので、記録します。
digメソッド
- HashクラスとArrayクラスの両方があるため、それぞれ説明します。
- 深くネストされたハッシュや配列から値を掘り出すメソッドです。
dig
=「掘る」ってことを想像すると覚えやすいっすね。
Hashクラス
- ネストしたハッシュから値を取り出すメソッド
- 引数には、キーを指定する。
- カンマ(,)で区切ることで、いくつもキーを指定できる
例
階層化されているものを想像すると、いつもガリガリ君を思い出しちゃいまして…
(CSSのpadding
,border
,margin
もガリガリ君で覚えました。)
garigari_boy = { ice: {shaved_ice: {stick: "当たり"}}} garigari_boy.dig(:ice, :shaved_ice, :stick) # => "当たり" # 参考:指定されていないキーを書くと、`nil`が返ってきます。 h.dig(:ice, :shaved_ice, :chocolate) # => nil
Arrayクラス
- さきほどのハッシュと同じように、配列でも
dig
メソッドを使えます。 - ハッシュと違って、引数には配列内の要素番号を指定します。
例
また、ガリガリ君使います
sweets = [["アイス", ["あずきバー", "ガリガリ君"]]] sweets.dig(0, 1, 1) # => "ガリガリ君" # 参考:要素にない番号を書くと、`nil`が返ってきます。 sweets.dig(1, 2, 3) # => nil
- 解説
- 最初の引数「0」:1番外側の
[]
内、0番目の要素["アイス", ["あずきバー", "ガリガリ君"]]
を指定 - 2番目の引数「1」:外から2番目の
[]
内、1番目の要素["あずきバー", "ガリガリ君"]
を指定 - 3番目の引数「1」:1番内側の
[]
内、1番目の要素[ガリガリ君"]
を指定
→ ガリガリ君が呼び出される
- 最初の引数「0」:1番外側の
応用
- ハッシュと配列が混同しているオブジェクトに対しても
dig
が使えます。
例
#その1 g = { foo: [10, 11, 12] } g.dig(:foo, 1) # => 11 #その2 [42, {foo: :bar}].dig(1, :foo) # => :bar