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 下あたりから呼ぶようにして使っています。

0