我需要使用key_name和一組結果中的值創建散列。從地圖結果創建散列
這將是明確的,如果我告訴你我有:
results.map{|r| {r.other_model.key_name=>r.value} }
那是給我這樣的:
[{"api_token"=>"stes"}, {"Name"=>"nononono"}]
但我想這一點:
{"api_token"=>"stes", "Name"=>"nononono"}
是什麼在紅寶石上做到這一點最美麗的方式?
我需要使用key_name和一組結果中的值創建散列。從地圖結果創建散列
這將是明確的,如果我告訴你我有:
results.map{|r| {r.other_model.key_name=>r.value} }
那是給我這樣的:
[{"api_token"=>"stes"}, {"Name"=>"nononono"}]
但我想這一點:
{"api_token"=>"stes", "Name"=>"nononono"}
是什麼在紅寶石上做到這一點最美麗的方式?
待辦事項如下使用Hash::[]
Hash[results.map { |r| [r.other_model.key_name,r.value] } ]
在Ruby 2.1.0,我們有Hash#to_h
results.map { |r| [r.other_model.key_name,r.value] }.to_h
或使用Enumerable#each_with_object
results.each_with_object({}) { |r,h| h[ r.other_model.key_name ] = r.value }
到目前爲止,我的最好的方法是這樣的:
Hash[results.map{|r| [r.other_model.key_name, r.value] } ]
results.inject({}){|h, r| h[r.other_model.key_name] = r.value; h}
這比創建中間數組然後將其轉換爲散列的其他答案更有效。
我是唯一一個被' h'?怎麼樣'合併'而不是? (如果你想說,「克服它」,繼續 - 我可以接受它。) –
什麼?沒有水龍頭? '{} .tap {| h | results.each {| r | h [r.other_model.key_name] = r.value}}'。像我一樣,如果你喜歡'tap'的聲音,{} .tap {}。tap {}。tap {| h | ...}'也可以。 –