Eventuali duplicati:
How do I compare two hashes?Confrontando rubino hash
Ho due hash rubino (che sono essenzialmente modelli) e sto cercando di trovare le differenze tra di loro, uno è un vecchio esempio di un oggetto in cui l'altro ha nuovi valori assegnati ad alcuni attributi. Sto provando a determinare quali chiavi sono cambiate, ma sembra che non ci sia nulla di integrato nell'Hash per questo. Posso pensare ad alcune brute soluzioni di forza, ma mi chiedevo se c'è forse una soluzione elegante là fuori.
Idealmente ho bisogno di essere in grado di prendere due hashs in questo modo:
element1 = {:name => "Original", :description => "The original one!"}
element2 = {:name => "Original", :description => "The new one!"}
ed essere in grado di confrontare/li diff e ottenere qualcosa di simile:
{:description => "The new one!"}
In questo momento tutto quello che ho può davvero pensare di iterare attraverso le chiavi in un hash e confrontando il valore di quella chiave con la chiave corrispondente nel secondo hash, ma sembra forzato troppo brutale.
Qualche idea? Molte grazie!
Per il mio scopo non mi interessa particolarmente poiché ho solo bisogno di sapere quali campi sono stati modificati. Se stavo usando AR questo non sarebbe un problema, ma tutto è stato sottratto attraverso un livello dati a CouchDB, quindi mi trovo a dover reinventare la ruota, per così dire, per alcune funzionalità. Grazie comunque per il suggerimento. – Chelsea
Che naturalmente corrisponde al tuo commento sulla "forza bruta", ma ritengo che sia utile e non così orribile o inelegante. –
Questo metodo non noterà chiavi aggiuntive nell'hash 'other' nè sarebbe in grado di dire che l'assenza della chiave dal valore è' nil', per il controllo della versione migliorata http://stackoverflow.com/a/19184270/54247 – dolzenko