2017-02-17 29 views
0

ハッシュの配列をハッシュの要素の1つであるハッシュに変換しようとしています。例えばハッシュの配列をルビの単一ハッシュに変換する

a = [{"active_accounts": 3, "id": 5}, {"active_accounts": 6, "id": 1}

が、私は配列をループして、特定のキーのための個別のハッシュにアクセスして、それをやって試してみましたが、それはいないようです

a = {5: {"active_accounts": 3}, 1: {"active_accounts": 6}} 

に、この配列を変換したいです働くどんなリードも感謝します。

+0

あなたが試したコードを投稿してくださいすることができます。 –

+0

'レスポンス= Hash.new a.each do | key | レスポンス[key [:id]] = {"active_accounts":キー[:active_accounts]} end レスポンス ' –

答えて

2
a.each_with_object({}) {|obj , hash| hash.merge!(Hash[obj[:id], Hash["active_accounts",obj[:active_accounts]]])} 

# {5=>{"active_accounts"=>3}, 1=>{"active_accounts"=>6}} 

はそれがお役に立てば幸いです。

+0

それは確かにRangnathでした。 :) –

1

安全な変種は、配列へのマッピング(同じ"id"が予想され、適切に処理されます):

a.group_by { |e| e.delete("id") } 

あなたが尋ねたまさに:

a.group_by { |e| e.delete("id") } 
.map { |k, v| [k, v.first] } 
.to_h 
+0

ありがとうmudasobwa。素晴らしいヘルプ。 –

1

もう一つの可能​​な解決策)

a.map { |hash| [hash.delete(:id), hash] }.to_h 
#=> {5=>{:active_accounts=>3}, 1=>{:active_accounts=>6}} 
関連する問題