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 >=3D b
>    # do_something with a and b
>  end
> end
>
> In general, I=92m looking for an idiomatic way of traversing each
> possible pair of a given enum=92s 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=92s something =20=

> there
> already. Note: Enumerable#each_pair doesn=92t cut it, as it=92s just =
for
> neighbouring element pairs, while I need something for all possible
> pairs.)
>
> Thanks in advance for any help with the above!
>
> -- Shot
> --=20
> 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 =20=

or as an example.  If you can rely on the ordering of elements (your =20
a>=3Db), your code isn't too bad, but the code on the ruby list will be =20=

(is) part of Ruby1.9 and only depends on position within the Array.  =20
If you have an enumerable that's not an Array, you might have some =20
tweaking to do anyway.

-Rob

Rob Biedenharn		http://agileconsultingllc.com
Rob / AgileConsultingLLC.com=