如何从 Ruby 的散列表中获得第一个键和值对

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

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

我的原则是:

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而不是0。 我希望有一个更好的方法来获得哈希表的第一个键/值对,而不是使用从前一个表中检索到的键和值创建新的哈希表。

113622 次浏览

你可以这么做

key, value = hash.first

或者你更喜欢:

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

那么也许:

new_hash = {key => value}

有一个 简短的回答不需要你使用额外的变量:

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}
[hash.first].to_h

另一种方法。

my_hash = { "a" => "first", "b" => "second" }


{ my_hash.keys.first => my_hash.values.first }

这个也可以