2017-02-24 4 views
0

Gibt es eine Möglichkeit, ich kann eine value in hasharray, und formatieren Sie es, um nur Hash?Ruby einen Wert im Hash-Array in einem Hash-Format neu formatieren

Gibt es irgendeine Methode, die ich damit machen kann?

Beispiel

[ 
    { 
    "qset_id" => 1, 
    "name" => "New1" 
    }, 
    { 
    "qset_id" => 2, 
    "name" => "New2" 
    } 
] 

Ergebnis

{ 
    1 => { 
     "name" => "New1" 
    }, 
    2 => { 
     "name" => "New2" 
    } 
} 
+0

Wenn Sie ein Beispiel geben (im Allgemeinen eine gute Sache) ist es hilfreich, jedem Eingabeobjekt eine Variable zuzuweisen (zB 'arr = [...] '). Auf diese Weise können Leser auf diese Variablen in Antworten und Kommentaren verweisen, ohne sie definieren zu müssen. Darüber hinaus beziehen sich alle Leser auf dieselben Variablen, was ebenfalls hilfreich ist. –

Antwort

0

Sie könnten über den ersten Hash laufen und in eine zweite Hash-Karte:

h1.map{|h| {h['qset_id'] => {'name' => h['name']}} } 
# => [{1=>{"name"=>"New1"}}, {2=>{"name"=>"New2"}}] 

... aber das wäre ein Array zurück. Sie könnten die Elemente in einen zweiten Hash wie folgt ziehen:

h2 = {} 
h1.each do |h| 
    h2[h['qset_id']] = {'name' => h['name']} 
end 
>> h2 
=> {1=>{"name"=>"New1"}, 2=>{"name"=>"New2"}} 
+0

Danke, es funktioniert gut. –

1

Sie können im Grunde willkürliche Manipulation zu tun mit reduce Funktion auf Arrays oder Hashes, zum Beispiel das Ihr Ergebnis

array.reduce({}) do |result, item| 
    result[item["qset_id"]] = { "name" => item["name"] } 
    result 
end 
bekommen

Sie können das gleiche tun mit each.with_object tun:

array.each.with_object({}) do |item, result| 
    result[item["qset_id"]] = { "name" => item["name"] } 
    end 

es im Grunde das Gleiche ist, aber Sie müssen nicht jede Iteration das Ergebnis machen zurückkehren (a ‚Memoobjekt‘ genannt).

+0

Fore mir der Ausgang dieses nicht die Anforderung überein: '[nil, { "name"=> "New1"}, { "name"=> "New2"}]' – mysmallidea

+0

@mysmallidea my bad, aktualisiert Antwort –

+0

Ich mag das 'with_object' besser als meins. – mysmallidea

Verwandte Themen