Possible en double:
How do I compare two hashes?comparaison ruby hash
J'ai deux hash rubis (qui sont essentiellement des modèles) et essaie de trouver les différences entre eux, on est une ancienne instance d'un objet où l'autre a de nouvelles valeurs assignées à certains attributs. J'essaie de déterminer quelles clés ont changé, mais il ne semble pas y avoir quelque chose de construit dans le Hash pour cela. Je peux penser à quelques solutions brutales, mais je me demandais s'il y avait peut-être une solution élégante là-bas.
Idéalement je dois être en mesure de prendre deux hashs comme ceci:
element1 = {:name => "Original", :description => "The original one!"}
element2 = {:name => "Original", :description => "The new one!"}
et être en mesure de comparer/diff entre eux et obtenir quelque chose comme ceci:
{:description => "The new one!"}
En ce moment, tout ce que je peut vraiment penser à itérer à travers les clés dans un hachage et à comparer la valeur à cette clé à la clé correspondante dans le deuxième hachage, mais cela semble trop brutal forcé.
Des idées? Merci beaucoup!
Pour mon but, je ne m'inquiète pas particulièrement car j'ai vraiment juste besoin de savoir quels champs ont changé. Si j'utilisais AR, ce ne serait pas un problème, mais tout est en train d'être extrait à travers une couche de données vers CouchDB, donc je me retrouve à devoir réinventer la roue, pour ainsi dire, pour certaines fonctionnalités. Merci pour la suggestion cependant. – Chelsea
Ce qui, bien sûr, correspond à votre commentaire "force brute", mais je trouve que c'est utile et pas si terrible ou inélégant. –
Cette méthode ne remarquera pas de clés supplémentaires dans le hachage 'other' et ne pourra pas non plus dire que l'absence de la clé est' nil', pour une vérification de la version améliorée http://stackoverflow.com/a/19184270/54247 – dolzenko