5

Ruby 有一个叫做单词数组的东西

fruits = %w(Apple Orange Melon)

变成

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

无论如何我也可以使用Ruby的单词数组作为哈希吗?

fruits["Apple"]将返回 0、1fruits["Orange"]等等。还是我必须将其声明为哈希?

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

目标是能够将字段保存为整数,但在 Rails 上将其表示为字符串。

4

4 回答 4

12
Hash[%w(Apple Orange Melon).each_with_index.to_a]  
# => {"Apple"=>0, "Orange"=>1, "Melon"=>2}
于 2013-10-17T12:40:32.213 回答
5

这是另一个:

fruits = %w(Apple Orange Melon)
fruit_hash = Hash[[*fruits.each_with_index]]
于 2013-10-17T12:45:43.640 回答
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,尤其是对于苹果、橙子、甜瓜之类的东西。字符串用于诸如推文、消息正文、商品描述......

{ Apple: "Our apples are full of antioxidants!",
  Orange: "Our oranges are full of limonene and vitamin C!",
  Melon: "Our melons are sweet and crisp!" }      
于 2013-10-17T12:51:51.250 回答
2
Hash[fruits.zip((0...fruits.length).to_a)]
=> {"Apple"=>0, "Orange"=>1, "Melon"=>2}
于 2013-10-17T12:40:03.970 回答