Sha256: 077a478c3dfc728387e50f2d390ce88ef92bbd0714dbf3293d9726e123fe3366

Contents?: true

Size: 605 Bytes

Versions: 26

Compression:

Stored size: 605 Bytes

Contents

module Enumerable

  # Like #uniq, but determines uniqueness based on a given block.
  #
  #   (-5..5).to_a.uniq_by {|i| i*i }
  #
  # produces
  #
  #   [-5, -4, -3, -2, -1, 0]
  #
  def uniq_by #:yield:
    h = {}; inject([]) {|a,x| h[yield(x)] ||= a << x}
  end

end


#  _____         _
# |_   _|__  ___| |_
#   | |/ _ \/ __| __|
#   | |  __/\__ \ |_
#   |_|\___||___/\__|
#
=begin test

  require 'test/unit'

  class TCEnumerable < Test::Unit::TestCase

    def test_uniq_by
      a = [-5, -4, -3, -2, -1, 0]
      r = (-5..5).to_a.uniq_by{|i| i*i }
      assert_equal( a, r )
    end

  end

=end

Version data entries

26 entries across 26 versions & 1 rubygems

Version Path
facets-0.9.0 lib/nano/enumerable/uniq_by.rb
facets-1.0.0 lib/facet/enumerable/uniq_by.rb
facets-1.0.3 packages/core/lib/facet/enumerable/uniq_by.rb
facets-1.1.0 lib/facet/enumerable/uniq_by.rb
facets-1.2.0 lib/facets/core/enumerable/uniq_by.rb
facets-1.2.1 lib/facets/core/enumerable/uniq_by.rb
facets-1.3.0 lib/facets/core/enumerable/uniq_by.rb
facets-1.3.1 lib/facets/core/enumerable/uniq_by.rb
facets-1.3.3 lib/facets/core/enumerable/uniq_by.rb
facets-1.3.2 lib/facets/core/enumerable/uniq_by.rb
facets-1.4.1 lib/facets/core/enumerable/uniq_by.rb
facets-1.4.0 lib/facets/core/enumerable/uniq_by.rb
facets-1.4.2 lib/facets/core/enumerable/uniq_by.rb
facets-1.4.3 lib/facets/core/enumerable/uniq_by.rb
facets-1.4.4 lib/facets/core/enumerable/uniq_by.rb
facets-1.4.5 lib/facets/core/enumerable/uniq_by.rb
facets-1.7.0 lib/facets/core/enumerable/uniq_by.rb
facets-1.7.30 lib/facets/core/enumerable/uniq_by.rb
facets-1.7.38 lib/facets/core/enumerable/uniq_by.rb
facets-1.7.46 lib/facets/core/enumerable/uniq_by.rb