Wie lassen sich Objekte in einem Array, die in Bezug auf ein oder mehrere Attribute eindeutig sind, am elegantesten heraussuchen?
Diese Objekte sind in ActiveRecord gespeichert, so dass die Verwendung von AR-Methoden auch in Ordnung wäre.
Wie lassen sich Objekte in einem Array, die in Bezug auf ein oder mehrere Attribute eindeutig sind, am elegantesten heraussuchen?
Diese Objekte sind in ActiveRecord gespeichert, so dass die Verwendung von AR-Methoden auch in Ordnung wäre.
Mir gefallen die Antworten von jmah und Head. Aber bewahren sie die Array-Reihenfolge? Sie könnten in späteren Versionen von Ruby, da es einige Hash-Einfügung-Reihenfolge-erhaltende Anforderungen in die Sprachspezifikation geschrieben wurden, aber hier ist eine ähnliche Lösung, die ich gerne verwenden, die Reihenfolge unabhängig bewahrt.
h = Set.new
objs.select{|el| h.add?(el.attr)}
Wenn Sie nun nach den Attributwerten sortieren können, ist dies möglich:
class A
attr_accessor :val
def initialize(v); self.val = v; end
end
objs = [1,2,6,3,7,7,8,2,8].map{|i| A.new(i)}
objs.sort_by{|a| a.val}.inject([]) do |uniqs, a|
uniqs << a if uniqs.empty? || a.val != uniqs.last.val
uniqs
end
Das ist für ein 1-Attribut eindeutig, aber die gleiche Sache kann mit lexikographischer Sortierung getan werden ...
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.