2016-04-09 21 views
0
input = {:a=>{:type=>"list", :values=>[{:type=>"b", :id=>"123"}, {:type=>"b", :id=>"456"}]}} 

Ausgabe alsConvert Hash-String in Ruby

folgt
{:new_name=>"123,456"} 

sein sollte ich versucht, wie this.Not sicher injizieren mit, was im Inneren des Blocks

input.tap do |e| 
e[:a].try(:[], :values).inject({}) do |h, obj| 
    h[:new_name] = ** 
end 
end 

Antwort

0
{:new_name => input.values.first[:values].map{|hash| hash[:id]}.join(',')} 
# => {:new_name=>"123,456"} 

Diese umfassen funktioniert nur, wenn Ihr Eingabe-Hash immer die gleiche Struktur hat.

1

Sie sind gegeben:

input = {:a=>{:type=>"list", 
       :values=>[{:type=>"b", :id=>"123"}, 
         {:type=>"b", :id=>"456"} 
         ] 
      } 
     } 

Lassen Sie uns zuerst vereinfachen:

a = input[:a][:values] 
    #=> [{:type=>"b", :id=>"123"}, 
     {:type=>"b", :id=>"456"}] 

nun die Fäden herausziehen wir brauchen:

b = a.map { |h| h[:id] } 
    #=> ["123", "456"] 

Schließlich

{ "new_name" => b.join(',') } 
    #=> {"new_name"=>"123,456"} 

Setzen Sie das alles zusammen,

{ "new_name" => input[:a][:values].map { |h| h[:id] }.join(',') } 
    #=> {"new_name"=>"123,456"}