我有一个哈希:
{"1"=>{"asset_class_id"=>"12", "ratio"=>"121"},
"2"=>{"asset_class_id"=>"22", "ratio"=>"45"},
"3"=>{"asset_class_id"=>"32", "ratio"=>"9"},
"4"=>{"asset_class_id"=>"42", "ratio"=>""}}
我想要实现的是获取比率的所有值并排除类似这样的空值:
["121", "45", "9"]
答案 0 :(得分:2)
hash = {"1"=>{"asset_class_id"=>"12", "ratio"=>"121"},
"2"=>{"asset_class_id"=>"22", "ratio"=>"45"},
"3"=>{"asset_class_id"=>"32", "ratio"=>"9"},
"4"=>{"asset_class_id"=>"42", "ratio"=>""}}
hash.values.map{|x| x['ratio']}.reject!(&:empty?)
答案 1 :(得分:0)
> hsh = {"1"=>{"asset_class_id"=>"12", "ratio"=>"121"},
"2"=>{"asset_class_id"=>"22", "ratio"=>"45"},
"3"=>{"asset_class_id"=>"32", "ratio"=>"9"},
"4"=>{"asset_class_id"=>"42", "ratio"=>""}}
> hsh.values
=> [{"asset_class_id"=>"12", "ratio"=>"121"},
{"asset_class_id"=>"22", "ratio"=>"45"},
{"asset_class_id"=>"32", "ratio"=>"9"},
{"asset_class_id"=>"42", "ratio"=>""}]
> hsh.values.map{|h| h["ratio"]}
=> ["121", "45", "9", ""]
> hsh.values.map{|h| h["ratio"]}.reject{|v| v.empty? }
=> ["121", "45", "9"]
答案 2 :(得分:0)
下面的代码会有技巧,但是这个({a,b,c}
)不是有效的ruby语法。
> newarr=[]
> a.values.each {|x| newarr << x['ratio']}
=> [{"asset_class_id"=>"12", "ratio"=>"121"}, {"asset_class_id"=>"22", "ratio"=>"45"}, {"asset_class_id"=>"32", "ratio"=>"9"}, {"asset_class_id"=>"42", "ratio"=>""}]
> newarr
=> ["121", "45", "9", ""]
<强>更新强>
inf第一版问题,还包括空字符串。跳过它,你应该这样做,
a.values.each {|x| newarr << x['ratio'] unless x['ratio'].blank? }
或,
a.values.each {|x| newarr << x['ratio'] if x['ratio'].present? }
但请注意,以上两行仅为轨道解决方案。
下面是普通的红宝石。a.values.each {|x| newarr << x['ratio'] unless x['ratio'].empty? }
答案 3 :(得分:0)
使用此代码:
arr = []
a.values.each {|e| arr << e["ratio"] if e["ratio"].present?}
puts arr
答案 4 :(得分:0)
hash = {"1"=>{"asset_class_id"=>"12", "ratio"=>"121"},
"2"=>{"asset_class_id"=>"22", "ratio"=>"45"},
"3"=>{"asset_class_id"=>"32", "ratio"=>"9"},
"4"=>{"asset_class_id"=>"42", "ratio"=>""}}
您可以简单地调用该命令
哈希[hash.to_a] .values.map {| V | v [:ratio] .if v [:ratio] .present?}
答案 5 :(得分:0)
这不是最好的代码,但你可以从一开始:
x = {"asset_class_id"=>"12", "ratio"=>"121"}
x.each do |key, value|
if key=="ratio"
puts value
end
end
嗯,我有点晚了。以上解决方案更好。