这是我的哈希:
{"funds"=>
{"0"=>
{"sector"=>"6555",
"fund_id"=>"4308",
"percent"=>"20.0",
"fund_distribution_id"=>"315304"
}
}
}
如何获取sector
,fund_id
等的值?
如果我执行以下操作,我会得到一个未定义的方法'[]'nil:NilClass因为它正在寻找'0'的'扇区'键
params[:funds].each_with_index do |f, index|
puts f[index]['sector']
end
答案 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)