J'essaie d'obtenir la première clé et la clé de valeur à partir d'une table de hachage en Ruby. Je ne connais pas les valeurs clés du hachage car il est transmis à la méthode. Je ne peux trouver nulle part en ligne comment trouver la première clé/valeur en tant que table de hachage séparée. Je pense hash[0]
essaiera simplement de trouver un élément avec un nom 0. Il retournera simplement nil
lorsque je lancerai le code.
Je sais que je peux trouver le nom de la clé et la valeur, puis créer un nouveau hachage à partir d’eux, mais je me demande s’il existe un moyen plus facile de le faire, alors j’obtiens un hachage immédiatement.
voici mon code:
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)
Cela me donne le résultat correct. Le problème est que je ne comprends pas pourquoi c'est -1 au lieu de zéro ... Et j'espérais qu'il y avait un meilleur moyen d'obtenir la première paire clé/valeur d'une table de hachage au lieu de créer un nouveau hachage table avec la clé et la valeur extraites de la table précédente.
Vous pouvez juste faire
key, value = hash.first
ou si vous préférez:
key = hash.keys[0]
value = hash.values[0]
Alors peut-être:
new_hash = {key => value}
Il y a un réponse plus courte qui ne vous oblige pas à utiliser de variables supplémentaires:
h = { "a" => 100, "b" => 200 , "c" => 300, "d" => 400, "e" => 500}
Hash[*h.first] #=> {"a" => 100}
Ou si vous voulez récupérer une clé/valeur à une position unique
Hash[*h.to_a.at(1)] #=> {"b" => 200}
Ou récupérer une clé/des valeurs d'une plage de positions:
Hash[h.to_a[1,3]] #=> {"b"=>200, "c"=>300, "d"=>400}