> Here's a little group method I just wrote on the Array class (and how to
use it) that might serve your purpose well:
>
> class Array
> def group
> groups = {}
> self.each do |e|
> key = yield e
> groups[key] ||= []
> groups[key] << e
> end
> groups
> end
> end
>
> class Foo
> attr_accessor :year, :title
>
> def initialize(year, title)
> self.year = year
> self.title = title
> end
> end
>
> a = []
> a << Foo.new(2006, 'Alpha')
> a << Foo.new(2006, 'Beta')
> a << Foo.new(2007, 'Gamma')
> a << Foo.new(2008, 'Delta')
>
> ag = a.group { |e| e.year }
>
> ag.keys.sort.each do |year|
> puts year
> ag[year].each do |foo|
> puts ' ' + foo.title
> end
> end
>
> __END__
>
> 2006
> Alpha
> Beta
> 2007
> Gamma
> 2008
> Delta
I've been playing with inject lately. FWIW, you can use it here, although
it's not as pretty or obvious as: a.group { |e| e.year }
ag = a.inject({}) { |h, e| h[e.year] = (h[e.year] || []) << e; h }
or
ag = a.inject({}) { |h, e| h[e.year] ||= []; h[e.year] << e; h }
Brian
_______________________________________________
Sdruby mailing list
[email protected]
http://lists.sdruby.com/mailman/listinfo/sdruby