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

Xit*_*d13 55 ruby hash

我正在尝试从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)
Run Code Online (Sandbox Code Playgroud)

这让我得到了正确的结果问题是我不明白为什么它是-1而不是零...我希望有更好的方法来获得哈希表的第一个键/值对而不是创建新哈希表格,其中包含您从上一个表格中检索到的键和值.

pgu*_*rio 144

你可以这样做

key, value = hash.first
Run Code Online (Sandbox Code Playgroud)

或者如果您愿意:

key = hash.keys[0]
value = hash.values[0]
Run Code Online (Sandbox Code Playgroud)

那么也许:

new_hash = {key => value}
Run Code Online (Sandbox Code Playgroud)


met*_*gfu 38

有一个较短的答案,不要求你使用额外的变量:

h = { "a" => 100, "b" => 200 , "c" => 300, "d" => 400, "e" => 500}
Hash[*h.first] #=> {"a" => 100}
Run Code Online (Sandbox Code Playgroud)

或者,如果要在任何单个位置检索键/值

Hash[*h.to_a.at(1)] #=> {"b" => 200}
Run Code Online (Sandbox Code Playgroud)

从一系列位置检索键/值:

 Hash[h.to_a[1,3]] #=> {"b"=>200, "c"=>300, "d"=>400}
Run Code Online (Sandbox Code Playgroud)


小智 6

[hash.first].to_h
Run Code Online (Sandbox Code Playgroud)

另一种方法可以做到这一点。