From: SonOfLilit Date: 2007-04-29T21:56:51+09:00 Subject: Re: Partitioning with Set.divide Well, you could first count how many repetitions there are of each line and then partition the set of pairs [line, count]. e.g. h = Hash.new {0} # is this how I set a default value? STDIN.each_line {|l| h[l] += 1} partitioning = Set.new(h.to_a).divide{|a| a[0][0]} Aur On 4/29/07, Peter Szinek wrote: > Hello all, > > I have been playing with partitioning a set recently and I am stuck with > an issue. The whole story is here: > > http://www.rubyrailways.com/partitioning-sets-in-ruby/ > > A quick version for those who would not like to read the article: > > Consider this input: > > a 53 2 3 > b 8 62 1 23 > a 9 0 31 > b 4 45 4 16 7 > b 1 23 > c 3 42 2 31 4 6 > a 1 3 22 > a 7 83 1 23 3 > b 1 14 4 15 16 2 > c 5 16 2 34 > > the goal is to create a partition based on the character in the first > column, i.e.: > > , > , > }> > > Which is exactly what Set.divide does. However, there is one problem: I > would like to know if there are duplicate lines. I.e. divide returns the > same result, no matter that the input is this: > > c 5 16 2 34 > c 5 16 2 34 > c 5 16 2 34 > > or this: > > c 5 16 2 34 > > What I would need is a modified divide which returns also the count of > the elements in the input set (at least for those elements which are > more than once in the set). Is this doable or do I have to roll some > code to do this for me additionally? > > Cheers, > Peter > > __ > http://www.rubyrailways.com :: Ruby and Web2.0 blog > http://scrubyt.org :: Ruby web scraping framework > http://rubykitchensink.ca/ :: The indexed archive of all things Ruby > >