2014-02-21 86 views
1

我有以下阵列转换阵列嵌套散列红宝石

['a', 'b', 'c'] 

如何将它转换成散列这样的怒吼:

{'a' => { position: index of array element a }, 'b' ...., 'c' ... } 

问候 格奥尔基。

+0

当您询问代码时,我们希望您展示您的尝试来解决问题。如果没有这样做,看起来你只是在为别人写信给你。 –

+1

谢谢你的批评。将来我会加入解决问题的尝试。 – Georgi

+1

@Georgi - 感谢您积极响应 –

回答

4

首先,你可以创建类似下面的使用方法Array#mapEnumerator#with_index数组:

ary = ['a', 'b', 'c'] 
temporary = ary.map.with_index { |e, i| [e, { position: i }] } 
# => [["a", {:position=>0}], ["b", {:position=>1}], ["c", {:position=>2}]] 

然后你就可以得到的数组转换使用可用的Array#to_h方法,因为红宝石2.1散列:

temporary.to_h 
# => {"a"=>{:position=>0}, "b"=>{:position=>1}, "c"=>{:position=>2}} 

对于旧版本的Ruby,Hash.[]方法将执行:

Hash[temporary] 
# => {"a"=>{:position=>0}, "b"=>{:position=>1}, "c"=>{:position=>2}} 
+0

+1提到新的Array#to_h,很好的解决了丑陋的Hash [...]。 – tokland

+0

谢谢。很好地解释 – Georgi

1
['a', 'b', 'c'].each_with_index.reduce({}) do |s, (e, i)| 
    s[e] = { position: i } 
    s 
end