Comment obtenir la première paire de clés et de valeurs d’une table de hachage dans Ruby

J’essaie d’obtenir la première clé et la clé de valeur d’une table de hachage en ruby. Je ne connais pas les valeurs clés du hachage car il est passé à la méthode. Je ne trouve nulle part en ligne comment trouver la première clé / valeur en tant que table de hachage séparée. Je pense que hash[0] va simplement essayer de trouver un élément avec un nom 0, il retourne simplement nil quand je lance le code.

Je sais que je peux trouver le nom de la clé et la valeur, puis créer un nouveau hash, mais je me demande s’il existe un moyen plus facile de le faire, alors je reçois immédiatement un hash.

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 il 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 que vous avez extraites du tableau précédent.

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 une réponse plus courte qui ne nécessite pas l’utilisation de variables supplémentaires:

 h = { "a" => 100, "b" => 200 , "c" => 300, "d" => 400, "e" => 500} Hash[*h.first] #=> {"a" => 100} 

Ou si vous souhaitez 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 à partir d’une gamme de positions :

  Hash[h.to_a[1,3]] #=> {"b"=>200, "c"=>300, "d"=>400} 

Je pense que vous devez toujours lire les bases du rbuy en premier. N’importe comment est la réponse et les liens pour les bases du rbuy.

 h = { "a" => 100, "b" => 200 } h.each {|key, value| puts "#{key} is #{value}" } produces: a is 100 b is 200 h.each_key{|key| puts "key is #{key} " produces: key is a key is b h.each_value{|value| puts "value is #{value} " produces: value is 100 value is 200 

Ici, dans la réponse ci-dessus, nous utilisons chacune, each_key, each_value pour obtenir les valeurs du hachage. chacun vous donnera chaque clé, valeur. each_key vous donnera chaque clé. Chaque valeur vous donnera chaque valeur.

Voici les liens pour les bases du rbuy.

http://ruby-doc.org/core-1.9.2/Hash.html

Ruby Basics