Tengo una condición en la que tengo un hash
hash = {"_id"=>"4de7140772f8be03da000018", .....}
y quiero este hash como
hash = {"id"=>"4de7140772f8be03da000018", ......}
PD : No sé cuáles son las claves en el hash, son aleatorias, lo que viene con un prefijo "_" para cada clave y no quiero subrayados
ruby-on-rails
ruby
ruby-on-rails-3
hash
Manish Das
fuente
fuente
_id
clavesid
en una serie de documentos MongoDBRespuestas:
fuente
hash.delete :old_key
devuelve y la eliminación utiliza la clave anterior. WOW, lo quiero tatuado en alguna parte :-D Graciasrails Hash tiene un método estándar para ello:
http://api.rubyonrails.org/classes/Hash.html#method-i-transform_keys
UPD: método ruby 2.5
fuente
Si todas las teclas son cadenas y todas tienen el prefijo de subrayado, entonces puede parchear el hash en su lugar con esto:
El
k[1, k.length - 1]
bit agarra todok
excepto el primer personaje. Si quieres una copia, entonces:O
También puede usar
sub
si no le gusta lak[]
notación para extraer una subcadena:Y, si solo algunas de las teclas tienen el prefijo de subrayado:
Se pueden hacer modificaciones similares a todas las otras variantes anteriores, pero estas dos:
debería estar bien con las teclas que no tienen prefijos de subrayado sin modificaciones adicionales.
fuente
tu puedes hacer
¡Esto debería funcionar para su caso!
fuente
Si queremos cambiar el nombre de una clave específica en hash, entonces podemos hacerlo de la siguiente manera:
supongamos que mi hash es
my_hash = {'test' => 'ruby hash demo'}
Ahora quiero reemplazar 'prueba' por 'mensaje', entonces:
my_hash['message'] = my_hash.delete('test')
fuente
hash[:new_key] = has[:old_key]
en su lugar es:hash[:dynamic_key] = hash[:_dynamic_key]
era una pregunta clara sobre expresiones regulares y no un simple reemplazo de hash.fuente
fuente
Fui exagerado y se me ocurrió lo siguiente. Mi motivación detrás de esto fue agregar claves de hash para evitar conflictos de alcance al fusionar / aplanar hashes.
Ejemplos
Extender clase de hash
Agrega el método rekey a las instancias de Hash.
Ejemplo de anteponer
Ejemplo de recorte
Acoplar y anexar un "alcance"
Si devuelve un hash para volver a escribir, combinará el hash que le permite aplanar colecciones. Esto nos permite agregar alcance a nuestras claves al aplanar un hash para evitar sobrescribir una clave al fusionar.
fuente
Las respuestas anteriores son lo suficientemente buenas, pero podrían actualizar los datos originales. En caso de que no desee que se vean afectados los datos originales, puede probar mi código.
Primero ignorará la clave '_id' y luego se fusionará con la actualizada.
fuente