11/08/2018, 23:59
階層になっている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 ...
自分用にメモ。車輪の再発明感が非常に強いんですが・・・
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 下あたりから呼ぶようにして使っています。