这是一个石头剪子游戏。来自IRB的game.class说这是一个数组。我希望找到赢得比赛的人的名字(在本例中是player2)。
游戏=[[“player1”,“p”],[“player2”,“s”]]
想到的方法是返回一个散列值,名称值被拆分。然后通过该值搜索该散列以获取播放器名称。

h = Hash.new(0)
game.collect do |f|
  h[f] = f[1]
end
h
#=> {["Player1", "P"]=>"P", ["Player2", "S"]=>"S"}

很近,但没有雪茄。我想要
{"Player1" => "P", "Player2" => "S"}

我用注射法再试了一次:
game.flatten.inject({}) do |player, tactic|
  player[tactic] = tactic
  player
end
#=> {"Player1"=>"Player1", "P"=>"P", "Player2"=>"Player2", "S"=>"S"}

这不起作用:
Hash[game.map {|i| [i(0), i(1)] }]
#=> NoMethodError: undefined method `i' for main:Object

我希望能给我一些能帮助我理解的建议。

最佳答案

你也可以这么做。

game = [["Player1", "P"], ["Player2", "S"]]
#=> [["Player1", "P"], ["Player2", "S"]]
Hash[game]
#=> {"Player1"=>"P", "Player2"=>"S"}

10-05 18:33