Sé que hash no almacena claves duplicadas. Pero quiero saber si ese comportamiento predeterminado se puede cambiar de acuerdo con los requisitos, ¿es eso posible? Daré el código de muestra aquí.
keys_array = [ 'key1', 'key2' ] values_array = [ {"A": { "id": "1" }}, {"B": { "id": "2" }} ] results = keys_array.zip(values_array ).to_h Aquí la salida es exactamente lo que quería {"key1"=>{:A=>{:id=>"1"}}, "key2"=>{:B=>{:id=>"2"}}}
Pero si las teclas se repiten, por ejemplo
keys_array = [ 'key1', 'key1' ] in which 'key1' key is repeated, result will be {"key1"=>{:B=>{:id=>"2"}}} Pero quiero {"key1"=>{:A=>{:id=>"1"}}, "key1"=>{:B=>{:id=>"2"}}} Sé cómo agrupar y todo, pero cambiará el formato de resultado Así que no quiero usar eso
Quiero este resultado {"key1"=>{:A=>{:id=>"1"}}, "key1"=>{:B=>{:id=>"2"}}} donde está key1 una tecla repetida. También tenga en cuenta que estos valores de matriz no son fijos, es dinámico
¡Agradezco enormemente su ayuda!
Puede alterar el comportamiento de un hash con compare_by_identity .
h = Hash.new.compare_by_identity h["key1"] = 1 h["key1"] = 2 ph #=> {"key1"=>1, "key1"=>2}Nunca he visto una manera útil para esto.
La estructura de datos que está buscando se llama multimapa . Por supuesto, es posible implementar uno en Ruby. Sólo tienes que hacerlo. (O encuentre una biblioteca que lo haga por usted).
Sin embargo, ni el núcleo ni la biblioteca estándar contienen una implementación multimapa.
De ninguna manera con un hash, podría usar una matriz de hash en su lugar:
[{"key1"=>{:A=>{:id=>"1"}}}, {"key1"=>{:B=>{:id=>"2"}}}]