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
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí