Sha256: 3fa5b8357a4fbdd399beeebd9921303b56bd567e87427f426aab99cdf083614c

Contents?: true

Size: 1.21 KB

Versions: 9

Compression:

Stored size: 1.21 KB

Contents

#--
# Hash#graph! is only good for a Hash.
#++
require 'facet/hash/graph'

module Enumerable

  # Like <tt>#map</tt>/<tt>#collect</tt>, but it generates a Hash.  The block
  # is expected to return two values: the key and the value for the new hash.
  #
  #   numbers  = (1..3)
  #   squares  = numbers.graph { |n| [n, n*n] }   # { 1=>1, 2=>4, 3=>9 }
  #   sq_roots = numbers.graph { |n| [n*n, n] }   # { 1=>1, 4=>2, 9=>3 }
  #
  #--
  # Credits for original version goes to Zallus Kanite and Gavin Sinclair.
  #++
  def graph(&yld)
    if yld
      inject({}) do |h,kv|
        nk, nv = yld[*kv]
        h[nk] = nv
        h
      end
    else
      Hash[*self.to_a.flatten]
    end
  end

  # no longer used
  #alias_method( :build_hash, :graph )
  #alias_method( :build_hash!, :graph! )
end



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

  require 'test/unit'

  class TCEnumerable < Test::Unit::TestCase

    def test_graph
      numbers  = (1..3)
      squares  = numbers.graph{ |n| [n, n*n] }
      assert_equal( {1=>1, 2=>4, 3=>9}, squares )
      sq_roots = numbers.graph{ |n| [n*n, n] }
      assert_equal( {1=>1, 4=>2, 9=>3}, sq_roots )
    end

  end

=end

Version data entries

9 entries across 9 versions & 1 rubygems

Version Path
facets-1.0.0 lib/facet/enumerable/graph.rb
facets-1.0.3 packages/core/lib/facet/enumerable/graph.rb
facets-1.2.0 lib/facets/core/enumerable/graph.rb
facets-1.3.0 lib/facets/core/enumerable/graph.rb
facets-1.2.1 lib/facets/core/enumerable/graph.rb
facets-1.1.0 lib/facet/enumerable/graph.rb
facets-1.3.1 lib/facets/core/enumerable/graph.rb
facets-1.3.2 lib/facets/core/enumerable/graph.rb
facets-1.3.3 lib/facets/core/enumerable/graph.rb