which is really a stringified hash, that looks like this:my $str="17:43:33:21:23:19:27:6";
This hash represents proportion-weights for advertisement roatation. That is, 17% of the time, ad #43 shows. 33% is ad #21, and so on. The way I am codifying this is to have an array, 0..99, where%hash=(17=>43, 33=>21, 23=>19, 27=>6);
scalar(grep/$hash{$key}/@ary)==$key;
So, the whole thing looks something like this:
my $str="17:43:33:21:23:19:27:6"; my %hash=split/:/,$str; foreach my $k(keys %hash) { push (@ary, map{$hash{$k}}(1..$k)); } my $adId=$ary[int(rand(100))];
I've ran some timed tests on this, and am not pleased with the results. Testing has determined that the part where the array is populated (via the push/map while foreaching over keys %hash) is where much of my load is coming in.
Any thoughts on how to streamline that (or any other part of the code) to make run faster?
| ÅßÅ×ÅßÅ
"It is a very mixed blessing to be brought back from the dead." -- Kurt Vonnegut |
In reply to $str to %hash to @ary by abaxaba
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |