"be consistent" PerlMonks

### Re: simultaneously adding and multiplying numbers in a hash/ array

by AnomalousMonk (Bishop)
 on Aug 09, 2010 at 22:12 UTC ( #853926=note: print w/replies, xml ) Need Help??

The use of a hash in this application is positively dangerous unless the elements of the  @change array (which become the keys of the hash) can be guaranteed to be unique. E.g.:

```>perl -wMstrict -le
"my @change         = (1.15, -0.1, 5.4, 1.03, 1.15, -0.241);
my @numberofshares = (9999,  400, 200,  300,  500,    240);
my %hash;
@hash{@change} = @numberofshares;
printf qq{%d keys in hash (oops...) \n}, scalar keys %hash;
my \$sum = 0;
while (my(\$k, \$v) = each %hash) {
\$sum += \$v * \$k;
}
print qq{sum == \$sum (?)};
"
5 keys in hash (oops...)
sum == 1866.16 (?)
[download]```

Update: The algorithm can be expressed more concisely with some list-processing functions:

```>perl -wMstrict -le
"use List::Util qw(sum);
use List::MoreUtils qw(pairwise);
use vars qw(\$a \$b);
my @change         = (1.15, -0.1, 5.4, 1.03, -0.241);
my @numberofshares = ( 100,  400, 200,  300,    240);
my \$sum = sum pairwise { \$a * \$b } @change, @numberofshares;
print qq{sum == \$sum};
"
sum == 1406.16
[download]```

I think it could be expressed yet more concisely in Perl 6, but my 6-fu is not that great. Would it be something like:
my \$sum +=<<*<< @change, @numberofshares;

Replies are listed 'Best First'.
Re^2: simultaneously adding and multiplying numbers in a hash/ array
by snoopy (Curate) on Aug 10, 2010 at 03:17 UTC
>> I think it could be expressed yet more concisely in Perl 6

I like:

```    say [+] @change <<*>> @numberofshares
[download]```

Log In?
 Username: Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://853926]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others having an uproarious good time at the Monastery: (4)
As of 2022-06-29 20:01 GMT
Sections?
Information?
Find Nodes?
Leftovers?
Voting Booth?
My most frequent journeys are powered by:

Results (97 votes). Check out past polls.

Notices?