2014-02-21 138 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