web-dev-qa-db-de.com

So erhalten Sie das erste Schlüssel - Wert - Paar aus einer Hash - Tabelle in Ruby

Ich versuche, den ersten Schlüssel und den Wertschlüssel aus einer Hash-Tabelle in Ruby abzurufen. Ich kenne die Schlüsselwerte des Hash nicht, da er an die Methode übergeben wird. Ich kann nirgendwo online finden, wie man den ersten Schlüssel/Wert als separate Hash-Tabelle findet. Ich glaube hash[0] versucht nur, ein Element mit dem Namen 0 zu finden. Es gibt nur nil zurück, wenn ich den Code ausführe.

Ich weiß, dass ich den Schlüsselnamen und den Wert finden und dann einen neuen Hash daraus erstellen kann, aber ich frage mich, ob es einen einfacheren Weg gibt, dies zu tun, sodass ich sofort einen Hash bekomme.

hier ist mein 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)

Dadurch erhalte ich das richtige Ergebnis. Das Problem ist, dass ich nicht verstehe, warum es -1 anstelle von Null ist Tabelle mit dem Schlüssel und dem Wert, die Sie aus der vorherigen Tabelle abgerufen haben.

52
Xitcod13

Sie können es einfach tun

key, value = hash.first

oder wenn Sie es vorziehen:

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

Dann vielleicht:

new_hash = {key => value}
138
pguardiario

Es gibt ein kürzere Antwort, für das Sie keine zusätzlichen Variablen verwenden müssen:

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

Oder wenn Sie einen Schlüssel/Wert an einer beliebigen Position abrufen möchten

Hash[*h.to_a.at(1)] #=> {"b" => 200}

Oder Schlüssel/Werte aus verschiedenen Positionen abrufen:

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