in reply to Re: Choosing a random product from an Array
in thread Choosing a random product from an Array
Combining the arrays is a neat idea but I think the way you do it is a bit unintuitive. Your %valid hash contains keys which are both valid and not valid members. Why not just create an array with the valid members and choose from it? Warning: This approach does come wiht a huge caveat. Explanation follows code.
my @one = qw( 1 3 5 7 9 11 13 15 17 19 21 23 ); my @two = qw( 1 5 9 13 17 21 ); my %valid; @valid{@one} = (1) x @one; @valid{@two} = (0) x @two; my @choices = keys %valid; sub randelt { $choices[rand @choices] }
Huge Caveat: As this uses all of the elements to choose as hash keys in an intermediate step, it might change the likelihood of a particular element being chosen if it were originally duplicated. For instance, if the original array was qw( a a b c ) there would be a 1 in 4 chance that an 'a' would be chosen. After being used as hash keys, however, the list becomes qw( a b c ) and there is a 1 in 3 chance that 'a' will be chosen. Do not use this method if your original list has duplicate members.
-sauoq "My two cents aren't worth a dime.";
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^3: Choosing a random product from an Array
by tadman (Prior) on Nov 13, 2002 at 00:14 UTC | |
by sauoq (Abbot) on Nov 17, 2002 at 02:47 UTC |