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 
but I can live with your group_by 
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 
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 
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