On Dec 15, 2007, at 6:03 PM, Shot (Piotr Szotkowski) wrote:

> I seem to end up doing the following quite a lot:
>
> enum.each do |a|
>  enum.each do |b|
>    next if a >= b
>    # do_something with a and b
>  end
> end
>
> In general, I√ő looking for an idiomatic way of traversing each
> possible pair of a given enum√‘ contents (once). Is there a more
> compact construct?
>
> (I assume I could finally grasp the whole block-passing side of Ruby
> and write my own Enumerable#each_mix, but maybe there√‘ something  here
> already. Note: Enumerable#each_pair doesn√’ cut it, as it√‘ just for
> neighbouring element pairs, while I need something for all possible
> pairs.)
>
> Thanks in advance for any help with the above!
>
> -- Shot
> -- 
> The existential root of libertarianism is the experience of
> being very bad at taking orders from morons.   -- Leopold Leider



http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-list/42671

You could use the Array#combination code posted there either directly  r as an example.  If you can rely on the ordering of elements (your  
a>=b), your code isn't too bad, but the code on the ruby list will be  is) part of Ruby1.9 and only depends on position within the Array.   
If you have an enumerable that's not an Array, you might have some  
tweaking to do anyway.

-Rob

Rob Biedenharn		http://agileconsultingllc.com