Ich habe eine Reihe von Hashes, und ich möchte die einzigartigen Werte daraus. Anrufen gibt mir nicht, was ich erwarte.Wie bekomme ich die einzigartigen Elemente aus einem Array von Hashes in Ruby?
a = [{:a => 1},{:a => 2}, {:a => 1}]
a.uniq # => [{:a => 1}, {:a => 2}, {:a => 1}]
Wo ich erwartet hatte:
[{:a => 1}, {:a => 2}]
im Netz Bei der Suche um, habe ich nicht kommen mit einer Lösung, die ich mit war glücklich. Leute empfohlen, Hash.eql?
und Hash.hash
neu zu definieren, da das ist, was Array.uniq
abfragt.
Edit: Wo ich in der realen Welt darauf stieß, waren die Hashes etwas komplexer. Sie waren das Ergebnis von geparsten JSONs, die mehrere Felder hatten, von denen einige auch Hashwerte enthielten. Ich hatte eine Reihe von Ergebnissen, die ich herausfiltern wollte.
Ich mag nicht die neu zu definieren Hash.eql?
und Hash.hash
Lösung, weil ich entweder Hash
neu zu definieren global würde, oder es in meinem Array für jeden Eintrag neu zu definieren. Es wäre umständlich, die Definition von Hash
für jeden Eintrag zu ändern, insbesondere da in jedem Eintrag verschachtelte Hashes vorhanden sein können.
Das Ändern von Hash
hat weltweit ein gewisses Potenzial, vor allem, wenn es vorübergehend durchgeführt wurde. Ich möchte eine weitere Klassen- oder Hilfsfunktion erstellen, die die alten Definitionen speichert und wiederherstellt, aber ich denke, das fügt mehr Komplexität hinzu, als wirklich benötigt wird.
Die Verwendung von inject
scheint eine gute Alternative zur Neudefinition Hash
zu sein.
viel besser denke ich, als die Verbindung, die ich oben – edthix