2017-02-16 9 views
0

У меня есть хэш, как:Rails - Как отобразить все значения в вложенной хэш

{"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

.values.map {| x | x ['ratio']} –

ответ

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?) 
+0

Я попробовал ваше предложение и да, он работает. Спасибо за это. – romiesilvano

+0

Приветственный брат –

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"] 
0

ниже код будет делать трюк, но это ({a,b,c}) не является допустимым синтаксисом рубин.

> 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", ""] 

UPDATE

инф первая версия вопроса, также была включена пустая строка. чтобы пропустить его, вы должны сделать,

a.values.each {|x| newarr << x['ratio'] unless x['ratio'].blank? } 

или,

a.values.each {|x| newarr << x['ratio'] if x['ratio'].present? } 

но имейте в виду, что выше 2 линии рельсы только решения.

ниже обычный рубин.

a.values.each {|x| newarr << x['ratio'] unless x['ratio'].empty? } 
+0

Ooops! Спасибо, что поймал это, я ценю это. – romiesilvano

0

Используйте этот код:

arr = [] 
a.values.each {|e| arr << e["ratio"] if e["ratio"].present?} 
puts arr 
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 [hash.to_a] .values.map {| v | v [: отношение] .if V [: отношение] .present}

0

Это не самый хороший код, но вы можете начать с этим для одного:

x = {"asset_class_id"=>"12", "ratio"=>"121"} 
x.each do |key, value| 
    if key=="ratio" 
    puts value 
end 
end 

Ну, я был немного поздно. Выше решений лучше.

 Смежные вопросы

  • Нет связанных вопросов^_^