2013-10-17 209 views
5

Ruby有一種叫做字陣列紅寶石字數組作爲散列?

fruits = %w(Apple Orange Melon) 

成爲

fruits = ["Apple", "Orange", "Melon"] 

有反正我也可以使用Ruby的話數組作爲哈希?

fruits["Apple"]將返回0,fruits["Orange"] 1等等。或者我必須聲明這是一個散列?

fruits_hash = { 
    'Apple' => 0, 
    'Orange' => 1, 
    'Melon' => 2, 
} 

的目標是能夠到現場保存爲整數,但有它的代表性爲on Rails的字符串。

回答

12
Hash[%w(Apple Orange Melon).each_with_index.to_a] 
# => {"Apple"=>0, "Orange"=>1, "Melon"=>2} 
+1

我更喜歡這個。 – Bala

+2

不錯的。 ..... –

2
Hash[fruits.zip((0...fruits.length).to_a)] 
=> {"Apple"=>0, "Orange"=>1, "Melon"=>2} 
5

這裏是另一個問題:

fruits = %w(Apple Orange Melon) 
fruit_hash = Hash[[*fruits.each_with_index]] 
5

你實際上並不需要Hash爲你的情況。在不同情況下需要散列,例如。表達類似的數據:

{ Apple: :Rosaceae, 
    Orange: :Rutaceae, 
    Melon: :Cucurbitaceae } # botanical family 

{ Apple: 27, 
    Orange: 50, 
    Melon: 7 } # the listing of greengrocer's stock 

你不需要Hash ES,僅僅爲了表達像{ Apple: 1, Orange: 2, Melon: 3 } - 普通數組[ :Apple, :Orange, :Melon ]是不夠好:

a = :Apple, :Orange, :Melon 
a.index :Orange #=> 1 

另外,我鼓勵你多考慮一下,有時使用Symbol而不是String,尤其是fo像蘋果,橙,甜瓜等東西。字符串用於推文,消息體,商品說明等內容...

{ Apple: "Our apples are full of antioxidants!", 
    Orange: "Our oranges are full of limonene and vitamin C!", 
    Melon: "Our melons are sweet and crisp!" }