I think Mark's answer was correct given the example you initially gave. However, if you want to iterate over groups of dissimilar sets without hard coding the looping to a fixed 'n' then I think you're after something like a multi-dimension iterator.


I'm pretty sure I have one for Ruby somewhere too.

The basic mechanism in my implementation is just like a car's odometer, but instead of each set of digits being the digits 0-9 they can vary to be sets of anything. When the least significant set overflows, it increments the set to it's right to increment by one, and if that overflows, then it tells the set to it's right to increment, etc.

I think if you imagine how a car odometer works you'll understand my code pretty quickly.

Good luck!

Alex Pooley (ABN: 47 643 918 301)
Freelance Developer

Mobile: 0438 313 337
Address:
  PO Box 17,
  Applecross, 6953
  Western Australia


BEGIN:VCARD
VERSION:3.0
N:Pooley;Alex;;;
FN:Alex Pooley
EMAIL;type=INTERNET;type=HOME;type=pref:[email protected]
TEL;type=WORK;type=pref:+61 08 6102 1155
TEL;type=CELL:0438 313 337
TEL;type=HOME:+61 08 9332 9006
TEL;type=WORK;type=FAX:+1 206 339 3423
item1.ADR;type=HOME;type=pref:;;PO Box 17;Applecross;WA;6953;Australia
item1.X-ABADR:au
PHOTO;BASE64:
  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
X-ABUID:B8E55ECC-1062-43B3-AC4C-9068750D5D68\:ABPerson
END:VCARD

On 31/03/2009, at 9:53 PM, Torm3nt wrote:


Unfortunately it doesn't quite work that straight forward when the
number of the different option groups = n =P


On Wed, Apr 1, 2009 at 12:52 AM, Mark Ratjens

Hmm ... what idioms are we allowed then? :-)

Iterate over the sizes
   within each size
      iterate over the colours
         make a combination and stow it somewhere

Does that make sense?

Either that or get some sleep :-)

Torm3nt wrote:
This may seem rather simple to some, but being late at night it's
driving me up the wall..

The context behind this is I'm trying to create all unique product
options for a product.

Consider:

We have two product option groups, size and colour.

Size contains: S, M, L, XL
Colour contains: red, blue, green, black, brown

I need to write an algorithm (this isn't for ruby btw, so no ruby
idioms =P), that gets all unique combinations, for example:

S red, S blue, S green, S black, S brown
M red, M blue.etc.etc.

They're all valid, but I can't then go:

red S - it's exactly the same option as before.

I have tried to do this three different ways and each way I've hit a daed end.


HELP!

=)









--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "Ruby or Rails Oceania" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [email protected]
For more options, visit this group at http://groups.google.com/group/rails-oceania?hl=en
-~----------~----~----~----~------~----~------~--~---


Reply via email to