Добавление или суммирование чисел в каждой строке в Perl - PullRequest
0 голосов
/ 29 марта 2012

Я хочу добавить цифры в каждой строке. Например, моя строка имеет следующий нет,

@lines = ("1 .2 .3 .4 .5","2  .7 .8 .8  .10 ","  3 .12 .13  .14 .15");

Я хочу добавить номера в каждую строку отдельно. первая цифра (1, 2 и 3) в каждой строке - это номер строки, который я не хочу включать в суммирование.

Я пытался:

($total+=$_) for @temp[1..$#temp];
print "The row adds up to $total";

Это дало мне итоговое значение за последний ряд, т.е. 3-й ряд = .54

Пожалуйста, предложите мне, как это исправить.

Спасибо

Ответы [ 2 ]

3 голосов
/ 29 марта 2012

Просто разбейте каждую строку на пробел (по умолчанию split) и используйте splice, чтобы извлечь все элементы, кроме первого. Использование map приводит к добавлению одного длинного списка чисел. Код выглядит так

use strict;
use warnings;

my @lines = ("1 .2 .3 .4 .5", "2  .7 .8 .8  .10 ", "  3 .12 .13  .14 .15");

my $total;
$total += $_ for map { my @f = split; splice @f, 1; } @lines;

print $total;

выход

4.34

EDIT

Мои извинения - я только что заметил, что вы хотите получить сумму для каждой строки отдельно. Вот мое решение для этого

use strict;
use warnings;

my @lines = ("1 .2 .3 .4 .5","2  .7 .8 .8  .10 ","  3 .12 .13  .14 .15");

print "$_\n" for map {
  my @f = split;
  my $total;
  $total += $_ for splice @f, 1;
  $total;
} @lines;

выход

1.4
2.4
0.54
2 голосов
/ 29 марта 2012

На самом деле 0.54 - это правильная сумма для 3-й строки imho. Вот фрагмент кода, который вычисляет сумму для всех 3 строк.

@lines = ("1 .2 .3 .4 .5","2  .7 .8 .8  .10 ","  3 .12 .13  .14 .15");

foreach (@lines) {
        @row=split;

        $total=0;
        $total+=$_ for @row[1..$#row];

        print "Result $row[0]: $total\n";
}

Выход:

Result 1: 1.4
Result 2: 2.4
Result 3: 0.54
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...