Estoy tratando de crear una nueva matriz donde los elementos de la matriz original se reemplazan con sus valores correspondientes en el hash. Quiero comparar cada elemento en arr con la clave en hash y, si son iguales, colocarlos en el arr y devolverlo al final. ¿Por qué mi código no funciona y cómo puedo acceder/devolver el valor clave de la entrada respectiva en hash, no solo el valor señalado por la clave? Si entiendes lo que estoy diciendo.
def element_replace(arr, hash) count = [] for i in arr do if i == hash.key count << value else count << i end end return count end arr1 = ["LeBron James", "Lionel Messi", "Serena Williams"] hash1 = {"Serena Williams"=>"tennis", "LeBron James"=>"basketball"} print element_replace(arr1, hash1) # => ["basketball", "Lionel Messi", "tennis"] puts arr2 = ["dog", "cat", "mouse"] hash2 = {"dog"=>"bork", "cat"=>"meow", "duck"=>"quack"} print element_replace(arr2, hash2) # => ["bork", "meow", "mouse"] putsRuby's Hash::fetch sería una técnica para obtener el resultado deseado:
> players = ["LeBron James", "Lionel Messi", "Serena Williams"] => ["LeBron James", "Lionel Messi", "Serena Williams"] > sports_data = {"Serena Williams"=>"tennis", "LeBron James"=>"basketball"} => {"Serena Williams"=>"tennis", "LeBron James"=>"basketball"} > players.map { |player| sports_data.fetch(player, player) } => ["basketball", "Lionel Messi", "tennis"]Si se supone que su hash devolverá la clave de forma predeterminada, podría usar un default_proc :
hash = { 'Serena Williams' => 'tennis', 'LeBron James' => 'basketball' } hash.default_proc = proc { |hash, key| key }Lo que te da:
hash['LeBron James'] #=> "basketball" # explicit value hash['Lionel Messi'] #=> "Lionel Messi" # default valueo, usando una matriz:
arr = ['LeBron James', 'Lionel Messi', 'Serena Williams'] hash.values_at(*arr) #=> ["basketball", "Lionel Messi", "tennis"]