rails - ruby hash to json
Cómo obtener la primera clave y el par de valores de una tabla hash en Ruby (3)
Estoy tratando de obtener la primera clave y la clave de valor de una tabla hash en ruby. No conozco los valores clave del hash porque se pasa al método. No puedo encontrar en ninguna parte en línea cómo encontrar la primera clave / valor como una tabla hash separada. Creo que hash[0]
solo intentará encontrar un elemento con un nombre 0, simplemente devuelve nil
cuando ejecuto el código.
Sé que puedo encontrar el nombre de la clave y el valor y luego crear un nuevo hash a partir de ellos, pero me pregunto si existe una forma más fácil de hacerlo, así que obtengo un hash de inmediato.
aquí está mi código:
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)
Esto me da el resultado correcto, el problema es que no entiendo por qué es -1 en lugar de cero ... Y esperaba que hubiera una mejor manera de obtener el primer par clave / valor de una tabla hash en lugar de crear un hash nuevo tabla con la clave y el valor que recuperó de la tabla anterior.
Creo que todavía necesitas leer los conceptos básicos de Ruby primero, de todos modos aquí está la respuesta y los enlaces para los conceptos básicos de Ruby.
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
Aquí, en la respuesta anterior, usamos cada, cada clave, cada valor para obtener los valores del hash. cada uno te dará cada clave, valor. each_key te dará cada clave. each_value te dará cada valor.
Aquí están los enlaces para los conceptos básicos de ruby.
Hay una respuesta más corta que no requiere el uso de variables adicionales:
h = { "a" => 100, "b" => 200 , "c" => 300, "d" => 400, "e" => 500}
Hash[*h.first] #=> {"a" => 100}
O si desea recuperar una clave / valor en cualquier posición individual
Hash[*h.to_a.at(1)] #=> {"b" => 200}
O recupera una clave / valores de un rango de posiciones :
Hash[h.to_a[1,3]] #=> {"b"=>200, "c"=>300, "d"=>400}
Puedes simplemente hacer
key, value = hash.first
o si lo prefiere:
key = hash.keys[0]
value = hash.values[0]
Entonces tal vez:
new_hash = {key => value}