Ruby 如何将字符串转换为哈希或将其添加到哈希

Ruby 如何将字符串转换为哈希或将其添加到哈希,ruby,methods,hash,split,Ruby,Methods,Hash,Split,因此,在basicruby中,我试图找出如何将字符串转换为散列或将字符串放入散列。我想要pokemon项作为键,一个整数作为值 大概是这样的: hash = {} pokemon_list = "pikachu charizard jigglypuff bulbasaur" def create_poke_list(string) hash << string.split end create_poke_list 如果您需要一个用默认值0初始化的散列,您只需执行以下操作即可

因此,在basicruby中,我试图找出如何将字符串转换为散列或将字符串放入散列。我想要
pokemon
项作为键,一个整数作为值

大概是这样的:

hash = {}
pokemon_list = "pikachu charizard jigglypuff bulbasaur"

def create_poke_list(string)
  hash << string.split
end
create_poke_list

如果您需要一个用默认值0初始化的散列,您只需执行以下操作即可

hash = Hash.new(0)
p hash["pikachu"]
#=> 0
步骤如下:

a = pokemon_list.split
  #=> ["pikachu", "charizard", "jigglypuff", "bulbasaur"]
b = a.product([0])
  #=> [["pikachu", 0], ["charizard", 0], ["jigglypuff", 0], ["bulbasaur", 0]]
b.to_h
  #=> <hash shown above>
这里只是
pokeman_list.zip(a)
的简写形式,其中
a
是由
pokenman_list.size
相等元素组成的数组,这里为零。另见

或使用

这是另一种不需要将字符串转换为数组的方法

pokemon_list.gsub(/[[:alpha:]]+/).with_object({}) { |w,h| h[w] = 0 }
  #=> {"pikachu"=>0, "charizard"=>0, "jigglypuff"=>0, "bulbasaur"=>0}

这是因为
gsub
在没有块的情况下执行时返回枚举数。无可否认,这是该方法的一个不同寻常的用法(因为它不会替换字符串中的字符),但我发现它有时很有用。

您对
“pikachu charizard jigglypuff bulbasaur”
字符串的预期结果是什么?请编辑您的问题,以显示所需的返回值(散列)对于给定的字符串
pokemon\u list
。我认为这是一个很好的答案,但需要解释为什么#product比
Hash.new(0)
更有意义。你和我都知道它为什么有效,但对大多数人来说,产品是一种非直觉的选择@CodeGnome,谢谢你的建议。我做了编辑,但我不知道如何利用
Hash.new(0)
a = pokemon_list.split
  #=> ["pikachu", "charizard", "jigglypuff", "bulbasaur"]
b = a.product([0])
  #=> [["pikachu", 0], ["charizard", 0], ["jigglypuff", 0], ["bulbasaur", 0]]
b.to_h
  #=> <hash shown above>
Hash[pokemon_list.split.product([0])]
pokemon_list.gsub(/[[:alpha:]]+/).with_object({}) { |w,h| h[w] = 0 }
  #=> {"pikachu"=>0, "charizard"=>0, "jigglypuff"=>0, "bulbasaur"=>0}