Custom Array#uniq for ActiveRecord results

You may be aware of the uniq method in Ruby:

[1,2,3,4,4,6,2].uniq => [1,2,3,4,6]

This does not work for arrays of ActiveRecord objects, especially if you want uniqueness on a arbitrary property. Here’s a snippet that allows you to uniquify an Array using an arbitrary property:

Hash[*arrayname.map {|obj| [obj.name, obj]}.flatten].values

Basically you create a new Hash, using the unique value as the key and the actual object as value. Then you convert the Hash#values back to an Array.

    4 thoughts on “Custom Array#uniq for ActiveRecord results”

    1. Actually, Ruby uses hashes under the cover when you call #uniq.

      And for making arrays uniq on arbitrary properties, use #uniq_by: collection.uniq_by(&:name). This should save you memory.

      Or, define the #== method on the objects, if you always uniq by the same property.

    Leave a Reply

    Your email address will not be published. Required fields are marked *

    You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>