Теперь, если вы можете отсортировать значения атрибутов, это можно сделать:
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
Это для уникального атрибута с 1 атрибутом, но то же самое можно сделать с лексикографической сортировкой ...