访问嵌套哈希值的最佳方法

时间:2015-07-18 07:10:30

标签: ruby

这是我的哈希:

{"funds"=>
  {"0"=>
    {"sector"=>"6555",
     "fund_id"=>"4308",
     "percent"=>"20.0",
     "fund_distribution_id"=>"315304"
    }
  }
}

如何获取sectorfund_id等的值?

如果我执行以下操作,我会得到一个未定义的方法'[]'nil:NilClass因为它正在寻找'0'的'扇区'键

params[:funds].each_with_index do |f, index|
    puts f[index]['sector']
end

4 个答案:

答案 0 :(得分:2)

如果

x = {"funds"=>
      {"0"=>
        {"sector"=>"6555", 
         "fund_id"=>"4308", 
         "percent"=>"20.0", 
         "fund_distribution_id"=>"315304"
        }
      }
    }

,然后你可以通过

获得sector和fund_id的价值
  x["funds"]["0"]["sector"]
  x["funds"]["0"]["fund_id"]

答案 1 :(得分:2)

试试这个:

x['funds'].values.map{ |fund| fund['sector'] }
x['funds'].values.map{ |fund| fund['fund_id'] }
# etc.

其中“x”是您给定的哈希值

答案 2 :(得分:2)

我通常使用以下内容扩展Hash类:

class Hash
  def deep_fetch *args
    args.inject(self) { |h, val| h.try(:[], val) }
  end
end

然后你可以打电话:

my_hash.deep_fetch 'funds', 0, 'sector'

获取资金 - > 0>>部门或者如果不存在,则您将获得nil

或在你的情况下:

(my_hash.deep_fetch('funds', 0) || {}).each{ ... }

答案 3 :(得分:1)

您需要执行index.to_s以使用字符串哈希来获取哈希值,如图所示。

如果您想要所有值,可以使用hash.values

如果您不想使用nil hash.try(:[], value)

获取错误