update rails create array ruby hash

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.

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

Ruby Basics


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}