Ruby字符数组作为哈希?

Cla*_*ash 5 ruby ruby-on-rails

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

fruits = %w(Apple Orange Melon)
Run Code Online (Sandbox Code Playgroud)

fruits = ["Apple", "Orange", "Melon"]
Run Code Online (Sandbox Code Playgroud)

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

fruits["Apple"]将返回0,1 fruits["Orange"]等等.或者我必须将其声明为哈希?

fruits_hash = {
  'Apple' => 0,
  'Orange' => 1,
  'Melon' => 2,
}
Run Code Online (Sandbox Code Playgroud)

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

Aru*_*hit 12

Hash[%w(Apple Orange Melon).each_with_index.to_a]  
# => {"Apple"=>0, "Orange"=>1, "Melon"=>2}
Run Code Online (Sandbox Code Playgroud)


hir*_*lau 5

这是另一个:

fruits = %w(Apple Orange Melon)
fruit_hash = Hash[[*fruits.each_with_index]]
Run Code Online (Sandbox Code Playgroud)


Bor*_*cky 5

你实际上并不需要Hash你的情况.在不同的情况下需要哈希,例如.表达如下数据:

{ Apple: :Rosaceae,
  Orange: :Rutaceae,
  Melon: :Cucurbitaceae } # botanical family
Run Code Online (Sandbox Code Playgroud)

要么

{ Apple: 27,
  Orange: 50,
  Melon: 7 } # the listing of greengrocer's stock
Run Code Online (Sandbox Code Playgroud)

你不需要Hash简单表达顺序的es,比如{ Apple: 1, Orange: 2, Melon: 3 }- plain array [ :Apple, :Orange, :Melon ]足够好了:

a = :Apple, :Orange, :Melon
a.index :Orange #=> 1
Run Code Online (Sandbox Code Playgroud)

另外,我鼓励你多考虑一下,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!" }      
Run Code Online (Sandbox Code Playgroud)