記憶の外付けHDD

切実に頭にUSBのコネクターがほしいです。なるべくtype-cでお願いしたいです。(忘れないように、プログラミング学習で学んだことを投稿してます)

2019/09/18_9月になってもガリガリ君(ruby_digメソッド)

今日もrubyの知らないメソッドと出会ったので、記録します。

digメソッド

  • HashクラスとArrayクラスの両方があるため、それぞれ説明します。
  • 深くネストされたハッシュや配列から値を掘り出すメソッドです。
    • dig=「掘る」ってことを想像すると覚えやすいっすね。

Hashクラス

  • ネストしたハッシュからを取り出すメソッド
  • 引数には、キーを指定する。
    • カンマ(,)で区切ることで、いくつもキーを指定できる

階層化されているものを想像すると、いつもガリガリ君を思い出しちゃいまして…
CSSpadding,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番目の要素[ガリガリ君"]を指定
      → ガリガリ君が呼び出される

応用

  • ハッシュと配列が混同しているオブジェクトに対してもdigが使えます。

#その1
g = { foo: [10, 11, 12] }
g.dig(:foo, 1)              
# => 11

#その2
[42, {foo: :bar}].dig(1, :foo) 
# => :bar

参考