Beefy Boxes and Bandwidth Generously Provided by pair Networks
Pathologically Eclectic Rubbish Lister

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,

Replies are listed 'Best First'.
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?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://946640]
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others cooling their heels in the Monastery: (3)
As of 2018-03-21 02:01 GMT
Find Nodes?
    Voting Booth?
    When I think of a mole I think of:

    Results (263 votes). Check out past polls.