Naming question

Hi list

I actually just need the following method there is no doubt about it;)
but the name which sprang into mind naturally “partition_by”
has a serious shortcoming, it is not POLS in the sense that
Enumerable#partition returns an array and Enumerable#partition_by
returns a hash.

module Enumerable
def partition_by &blk
result = Hash.new {|h,k| h[k] = [] }
each do | element |
result[ element ] << blk.call element
end
result
end
end

Any ideas for a nice different name?
Does Facet implement the above maybe?

A remark for my fellow fans of inject, the same code with inject
somehow does not feel right, I do not like to use inject with this
pattern
inject(…){ |acc,ele|

acc
}

Thanx in advance
Robert


http://ruby-smalltalk.blogspot.com/


Whereof one cannot speak, thereof one must be silent.
Ludwig Wittgenstein

On Fri, Apr 18, 2008 at 9:36 AM, Robert D. [email protected]
wrote:

Does Facet implement the above maybe?
Enumerable#cluster_by
great that would have been a nice name thanx Tom :wink:
but I can live with your group_by :slight_smile:
issue resolved

Actually I never thaught that Facets doc was so darn pretty good that
I could find it myself, should never have asked…

R.

http://ruby-smalltalk.blogspot.com/


Whereof one cannot speak, thereof one must be silent.
Ludwig Wittgenstein

From: Robert D. [mailto:[email protected]]

module Enumerable

def partition_by &blk

result = Hash.new {|h,k| h[k] = [] }

each do | element |

result[ element ] << blk.call element

end

result

end

end

i think this is #group_by in 1.8.7 and 1.9 ?

kind regards -botp

On Fri, Apr 18, 2008 at 4:02 AM, Peña, Botp [email protected] wrote:

end

i think this is #group_by in 1.8.7 and 1.9 ?

Which, I believe, first showed up in Rails sometime in 2006.


Rick DeNatale

My blog on Ruby
http://talklikeaduck.denhaven2.com/

On Fri, Apr 18, 2008 at 12:10 PM, Rick DeNatale
[email protected] wrote:

Which, I believe, first showed up in Rails sometime in 2006.


Rick DeNatale

Florian G. published a version in Jan 2005:
http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-core/4311

There are possibly even earlier ones.

Credit where credit is due :slight_smile:

Regards,
Sean

On Fri, Apr 18, 2008 at 6:04 PM, Sean O’Halpin [email protected]
wrote:

On Fri, Apr 18, 2008 at 12:10 PM, Rick DeNatale [email protected] wrote:

Which, I believe, first showed up in Rails sometime in 2006.


Rick DeNatale

Florian G. published a version in Jan 2005:
http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-core/4311
module Enumerable
def group_by
result = Hash.new { |h, k| h[k] = Array.new }
self.each do |item|
group = yield(item)
result[group] << item
end
return result
end
end

This is the code of the post linked to above, as one can see it works,
not as mine above :slight_smile:
but this natural way to write it is quite inefficient as the Facets
version shows. I have benchmarked them and to my surprise and that of
many others I guess the Facets implementation is almost twice as fast

  • for many different keys at least

result = {}
each do | ele|
( result[ yield(ele) ] ||= [] ) << ele
end
result.

Does anybody have the faintest idea why Hash.new{|h,k| … } is so
inefficient?

BTW I am quite happy that #group_by is quasi a standard name for this.

Cheers
Robert

http://ruby-smalltalk.blogspot.com/


Whereof one cannot speak, thereof one must be silent.
Ludwig Wittgenstein

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs