0

階層になっているHashに対して、浅い順にキーを辿ってvalueを得る

自分用にメモ。車輪の再発明感が非常に強いんですが・・・

h = {a: {b: {c: :d}}}

の時、

h.recursive_fetch [:a, :b, :c]
 => :d

ってなるメソッドをHashに追加しました。途中にKeyが無くてもExceptionが出ずに、

h.recursive_fetch [:a, :e, :c]
 => nil

ってなるようにしてます。

class Hash
  def recursive_fetch(keys = [], default = nil)
    keys.inject(self){|value, key|value.try(:[], key)} || default
  end
end

Railsだったら lib 下あたりに置いて、application.rb とか initializers 下あたりから呼ぶようにして使っています。


All Rights Reserved

Viblo
Let's register a Viblo Account to get more interesting posts.