【问题标题】:Adding or summing up numbers in each row in PerlPerl中每一行的数字相加或相加
【发布时间】:2012-04-13 04:57:52
【问题描述】:

我想在每一行中添加数字。 例如我的行有以下没有,

@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";

它给了我最后一行的总数,即第三行 =.54

请建议我如何解决这个问题。

谢谢

【问题讨论】:

  • 根据您的用户名,我猜这是 Perl。为了清楚起见,我添加了一个标签。
  • 第三行加起来不是 54 正确吗? 12+13+14+15=54
  • 这一行代码完美地说明了为什么我不喜欢 perl 作为一种编程语言。
  • @Kaii 什么,你不喜欢 for 循环?

标签: perl sum


【解决方案1】:

只需在空白处拆分每个字符串(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

编辑

抱歉 - 我刚刚注意到您需要单独为每个字符串提供总计。这是我的解决方案

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

【讨论】:

  • my $total; 只是 my $total = 0;.. 的短版吗?将$total 显式初始化为零不是更好吗,这样对每个人都更具可读性?或者这是某种优化?请指教。谢谢。
  • @stackoverflow:Perl 很乐意增加一个未定义的值。我更喜欢用这种方式声明变量,这样我就可以区分一个未触及的变量和一个值为 0 的变量。
  • @downvoters:如果我的解决方案有问题,请告诉我,以便我有机会修复它。
  • $total += $_ for splice @{[split]}, 1; 没有my @f = split;
  • @stackoverflow:我非常不喜欢这种 hack,更喜欢使用临时变量。 Perl 在这方面被打破了。
【解决方案2】:

实际上 0.54 是第三行恕我直言的正确总和。 这里的代码 sn-p 计算所有 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-07
    • 2011-08-10
    • 2011-08-10
    • 2021-09-24
    • 1970-01-01
    • 1970-01-01
    • 2012-07-29
    相关资源
    最近更新 更多