Удаляет ли метод uniq дубликаты?
поскольку эти объекты указывают на
то же пространство в памяти или что они
содержать идентичную информацию?
Метод основан на методе eql?
, поэтому он удаляет все элементы, для которых a.eql? (B) возвращает true.
Точное поведение зависит от конкретного объекта, с которым вы имеете дело.
Например, строки считаются равными, если они содержат один и тот же текст, независимо от того, имеют ли они одинаковое распределение памяти.
a = b = "foo"
c = "foo"
[a, b, c].uniq
# => ["foo"]
Это верно для большей части основных объектов, но не для объектов ruby.
class Foo
end
a = Foo.new
b = Foo.new
a.eql? b
# => false
Ruby рекомендует переопределить оператор ==
в зависимости от контекста вашего класса.
В вашем конкретном случае я бы предложил создать объект, представляющий результат в Твиттере, и реализовать логику сравнения, чтобы Array.uniq вел себя так, как вы ожидаете.
class Result
attr_accessor :text, :notes
def initialize(text = nil, notes = nil)
self.text = text
self.notes = notes
end
def ==(other)
other.class == self.class &&
other.text == self.text
end
alias :eql? :==
end
a = Result.new("first")
b = Result.new("first")
c = Result.new("third")
[a, b, c].uniq
# => [a, c]