web-dev-qa-db-ja.com

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である理由を理解していないということです。前のテーブルから取得したキーと値を持つテーブル。

52
Xitcod13

あなたはできる

key, value = hash.first

またはあなたが好むなら:

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

それから多分:

new_hash = {key => value}
138
pguardiario

短い回答があり、追加の変数を使用する必要はありません。

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}
35
metakungfu