> > (at
> > least I think so) locations in the file, a random tip is displayed. Once
> > it
> > is, it has to be marked as used. Currently, I'm doing this:
> >
> > # Tip is done; remove it
> > $tips[$tip_num] = $tips[$num_tips - 1];
> > undef $tips[$num_tips - 1];
> > --$num_tips;
> >
> > Am I doing it cleanly?
> > Should I use $#tips instead of a separate count variable (as I've done),
> > and
> > will decrementing $#tips actually reduce the size of the array in memory?
>
How about a different approach?
If you're only using each element once, and you're pulling them randomly,
why not scramble the array, and then use each element in turn?
If/when you get to the end ( $tips_num == (@tips - 1) ) (or something like
that), just reshuffle and start over.
Or maybe (now that I look at your code some more), that's mostly what you're
doing. I guess the question is: why bother taking the tip out of the array,
instead of just going past it and leaving it there?
Oh, and I found this somewhere. Pretty handy:
# fisher_yates_shuffle( [EMAIL PROTECTED] ) :
# generate a random permutation of @array in place
sub fisher_yates_shuffle {
my $array = shift;
my $i;
for ($i = @$array; --$i; ) {
my $j = int rand ($i+1);
@$array[$i,$j] = @$array[$j,$i];
}
}
Paul Archer
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]