首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在perl中减去数组中的值?

如何在perl中减去数组中的值?
EN

Stack Overflow用户
提问于 2014-07-19 00:16:06
回答 4查看 1.2K关注 0票数 1

如何用前一个值减去后一个值?

代码语言:javascript
复制
use warnings;
use strict;
my @hus = qw(7 9 12 16 20 21);
my ($i,$j);
for($i = 0; $i <= $#hus; $i++){
   for($j = 1; $j <= $#hus; $j++){
        my $m = $hus[$j]-$hus[$i];
        print "$m\n";
    }
}

在这个程序中给出了输出。但是我期望特定的输出,比如2 3 4 4 1。这个输出来自9-7=2,12-9=3,16-12=4,20-16=4,21-20=1。如何打印特定的输出?

EN

回答 4

Stack Overflow用户

发布于 2014-07-19 00:28:31

您可以非常简洁地完成此操作:

代码语言:javascript
复制
use strict;
use warnings;

my @hus = qw(7 9 12 16 20 21);
print $hus[$_] - $hus[$_-1], "\n" for 1 .. $#hus;

表达式1 .. $#hus生成一个从1到数组@hus的最后一个元素的索引的数字列表。for循环遍历该列表,将当前值赋给特殊变量$_。这意味着您感兴趣的两个元素分别位于@hus的位置$_$_-1

输出:

代码语言:javascript
复制
2
3
4
4
1
票数 4
EN

Stack Overflow用户

发布于 2014-07-19 00:20:51

您只需要遍历数组一次。

代码语言:javascript
复制
use warnings;
use strict;

my @hus = qw( 7 9 12 16 20 21 );

for (my $i = 0; $i < $#hus; ++$i) {
    my $m = $hus[$i+1] - $hus[$i];
    print "$m\n";
}

输出:

代码语言:javascript
复制
2
3
4
4
1
票数 2
EN

Stack Overflow用户

发布于 2014-07-19 01:04:32

您正在计算向前差异。它可以像这样简单地完成

代码语言:javascript
复制
use strict;
use warnings;

my @hus = qw( 7 9 12 16 20 21 );
my @diff = map { $hus[$_] - $hus[$_-1] } 1 .. $#hus;
print "@diff\n";

输出

代码语言:javascript
复制
2 3 4 4 1

更新

也许您想要在您的问题中显示的输出?你可以这样做

代码语言:javascript
复制
use strict;
use warnings;

my @hus = qw(7 9 12 16 20 21);

print join ', ', map {
  my ($i, $j) = @hus[$_-1, $_];
  sprintf('%d-%d=%d', $j, $i, $j-$i);
} 1 .. $#hus;
print "\n";

输出

代码语言:javascript
复制
9-7=2, 12-9=3, 16-12=4, 20-16=4, 21-20=1
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24829611

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档