如何从Ruby中的哈希表中获取第一个键和值对

我试图从ruby哈希表中获得第一个键和值键。 我不知道散列的关键值,因为它传递给方法。 我无法find任何地方在线如何find第一个键/值作为一个单独的哈希表。 我认为hash[0]只是试图find一个名称为0的元素,当我运行代码时它只返回nil

我知道我可以find关键的名称和值,然后从他们创build一个新的散列,但我想知道是否有一个更简单的方法来做到这一点,所以我马上得到一个散列。

这里是我的代码:

 def rps_game_winner(game) rock_in_hash = game.invert['R'] paper_in_hash = game.invert['P'] scissors_in_hash = game.invert['S'] if(rock_in_hash) if(paper_in_hash) return paper_in_hash; elsif(scissors_in_hash) return rock_in_hash end elsif(paper_in_hash) if(rock_in_hash) return paper_in_hash elsif(scissors_in_hash) return scissors_in_hash end end key = game.keys[-1] value = game.values[-1] winner = {key => value} return winner end game_one = { "Bob" => 'P', "Jim" => 'P' } puts rps_game_winner(game_one) 

这让我得到正确的结果问题是我不明白为什么它是-1而不是零…我希望有一个更好的方式来获得哈希表的第一个键/值对,而不是创build新的哈希表与您从上一个表中检索的键和值。

你可以做

 key, value = hash.first 

或者如果你喜欢:

 key = hash.keys[0] value = hash.values[0] 

那么也许:

 new_hash = {key => value} 

有一个较短的答案 ,不需要你使用额外的variables:

 h = { "a" => 100, "b" => 200 , "c" => 300, "d" => 400, "e" => 500} Hash[*h.first] #=> {"a" => 100} 

或者如果你想在任何一个位置检索一个键/值

 Hash[*h.to_a.at(1)] #=> {"b" => 200} 

从一系列位置中检索一个键/值

  Hash[h.to_a[1,3]] #=> {"b"=>200, "c"=>300, "d"=>400} 

我想你还是需要先阅读ruby的基础知识,这里的任何方法都是ruby基础知识的答案和链接。

 h = { "a" => 100, "b" => 200 } h.each {|key, value| puts "#{key} is #{value}" } produces: a is 100 b is 200 h.each_key{|key| puts "key is #{key} " produces: key is a key is b h.each_value{|value| puts "value is #{value} " produces: value is 100 value is 200 

在上面的答案中,我们使用each,each_key,each_value来获取哈希值。 每个会给你每个关键,价值。 each_key会给你每个键。 each_value会给你每个值。

这里是ruby的基础知识的链接。

http://ruby-doc.org/core-1.9.2/Hash.html

Ruby基础