ruby为array.each创建哈希

时间:2016-03-14 21:05:58

标签: ruby hash

这是我的代码:

@games.each do |game| #@games is an array
  #definitely working 
  game = Hash.new 0
end

正如你猜测的那样......它不起作用。没有错误。只是这样的变量不存在。我想要通过游戏标题调用我的哈希。很多,因为有240个标题。

我很确定我必须把这个“游戏= Hash.new 0”从块中删除,但说实话,我没有任何想法。

问候。

3 个答案:

答案 0 :(得分:1)

变量game包含数组的每个元素,由each逐个传递,所以你应该试试这个:

games_hash = {}

@games.each do |game|
  games_hash[game] = 0
end

答案 1 :(得分:0)

您可以使用each_with_object。

games_hash = @games.each_with_object({}) do |game, hash|
  hash[game] = 0
end

您也可以使用0初始化哈希。

games_hash = @games.each_with_object(Hash.new(0)) do |game, hash|
  hash[game]
end

答案 2 :(得分:0)

这是一个引用问题:

each区块内,game变量是对游戏的引用,但它不是游戏本身。

当您将新实例分配给game,即:('game = Hash.new')时,您正在更改该引用的值。现在game没有指向阵列中的一个游戏,但现在它指向一个新的哈希。

我不确定这是否是你想要的,试试这个:

games_hash = {}
@games.each do |game|
  games_hash[game] = {}
end