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