Beefy Boxes and Bandwidth Generously Provided by pair Networks
Do you know where your variables are?
 
PerlMonks  

Re^2: Looping Over Hash Skips an Element?

by mmartin (Monk)
on Jan 06, 2012 at 18:11 UTC ( #946640=note: print w/ replies, xml ) Need Help??


in reply to Re: Looping Over Hash Skips an Element?
in thread Looping Over Hash Skips an Element?

Hey toolic, thanks for the reply.

Duhh haha... I guess I had a brain fart on that one..! lol thanks.

I was just using the printing as an example. What I'm reallying trying to do is to add 8 consecutive values from the hash and place that summed value in an array.

Using the same hash, would this be what I should do?

my @sum_values; my $x = 0; foreach my $key ( keys %ifSpeeds ) { if ($counter <= 8) { $sum_values[$x] += $ifSpeeds{ $key }; $counter++; } else { $x++; $sum_values[$x] = $ifSpeeds{ $key }; $counter = 1; } } for (my $x = 0; $x <= $#sum_values; $x++) { print "$x) $sum_values\n"; }

The final result (given the hash with 32 elements) would be that the array would contains 4 values, which include the following:
[0] --> (sum of Gi3/1 to Gi3/8) [1] --> (sum of Gi3/9 to Gi3/16) [2] --> (sum of Gi3/17 to Gi3/24) [3] --> (sum of Gi3/25 to Gi3/32)
Does all that look correct to you?


Thanks Again,
Matt



Comment on Re^2: Looping Over Hash Skips an Element?
Select or Download Code
Re^3: Looping Over Hash Skips an Element?
by toolic (Bishop) on Jan 06, 2012 at 18:29 UTC
    How about:
    use List::MoreUtils qw(natatime); use List::Util qw(sum); use Data::Dumper; my @sums; my $it = natatime(8, (values %ifSpeeds)); while (my @vals = $it->()) { push @sums, sum(@vals); } print Dumper(\@sums); __END__ $VAR1 = [ '6200000000', '6200000000', '6200000000', '2600000000' ];
Re^3: Looping Over Hash Skips an Element?
by Eliya (Vicar) on Jan 06, 2012 at 18:42 UTC
    if ($counter <= 8) { $sum_values[$x] += $ifSpeeds{ $key }; $counter++; } else { $x++; $sum_values[$x] = $ifSpeeds{ $key }; $counter = 1; }

    To avoid the almost-duplication of the key statement, you could also write

    $sum_values[$x] += $ifSpeeds{ $key }; $x++ unless ++$counter % 8;

    or even simply

    $sum_values[$counter++/8] += $ifSpeeds{ $key }; # the [] impli +es int(...)

    (Perl does not generate a warning when you do something like $sum += ..., with $sum being undef initially — it treats it as 0)

Log In?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others wandering the Monastery: (6)
As of 2015-07-04 03:52 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (57 votes), past polls