从地图结果创建哈希

时间:2014-02-20 18:51:27

标签: ruby

我需要使用key_name和一组结果中的值创建一个哈希值。

如果我告诉你我拥有的东西,那就很清楚了:

results.map{|r| {r.other_model.key_name=>r.value} }

这就是给我这个:

[{"api_token"=>"stes"}, {"Name"=>"nononono"}]

但我想要这个:

{"api_token"=>"stes", "Name"=>"nononono"}

在ruby上执行此操作的最美妙方法是什么?

3 个答案:

答案 0 :(得分:2)

使用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 }

答案 1 :(得分:1)

到目前为止,我最好的方法是:

Hash[results.map{|r| [r.other_model.key_name, r.value] } ]

答案 2 :(得分:0)

results.inject({}){|h, r| h[r.other_model.key_name] = r.value; h}

这比创建中间数组然后将其转换为哈希的其他答案更有效。