首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Perl数组元素操作

Perl数组元素操作
EN

Stack Overflow用户
提问于 2014-07-25 11:08:06
回答 7查看 142关注 0票数 0

我一直在试着试着用这个,但它似乎没有点击。如果我有一个包含6个数字的数组:

代码语言:javascript
复制
@a = (1,2,3,4,5,6)
  1. 在这种情况下,我如何获得每一个索引( 2,4,6)?
  2. 如何计算每两个元素的差异,因此这里的输出如下:

1 1(因为2-1 =1,4-3 =1,等等)

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2014-07-25 11:18:00

注意:永远不要使用$a$b,它们很特殊(sort使用它们).通常情况下,最好给变量一个描述性的名称,命名它是什么,而不是它是什么类型的变量。

代码语言:javascript
复制
for ( my $index = 0; $index < scalar( @pairs ); $index += 2 ) {
  my $first = $pairs[ $index + 0 ];
  my $second = $pairs[ $index + 1 ];
  my $pair = $index / 2;
  my $difference = $second - $first;
  print "the difference of pair $pair is $difference\n";
}
票数 3
EN

Stack Overflow用户

发布于 2014-07-25 11:19:20

试试这个:

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

my $index = 1;
my @a = (1,2,3,4,5,6);
for (@a) {
    if ($index % 2 == 0) {
        my $diff = $_ - $a[$index-2];
        print $diff;
    }
$index++;
}
票数 1
EN

Stack Overflow用户

发布于 2014-07-25 11:36:06

我觉得你应该把你早些时候的尝试贴出来。在我看来,最好的学习方法是从你的错误中吸取教训,而不是得到一个正确的解决方案。

对于这个问题,我想我会在第一部分中使用C风格的For -循环,因为它很简单,而且如果出现新的需求,可以很容易地进行调整。

使用常规Perl样式的for-循环可以轻松地解决第二个问题。

代码语言:javascript
复制
use strict;
use warnings;   # always use these two pragmas

my @nums = 1..6; 
my @idx;
for (my $n = 0; $n <= $#nums; $n += 2) {    # loop from 0 to max index, step 2
    push @idx, $n;                          # store number in @idx
}
print "Indexes: @idx\n"; 

my @diff;
for my $n (0 .. $#nums - 1) {               # loop from 0 to max index minus 1
    push @diff, $nums[$n + 1] - $nums[$n];  # store diff in @diff
}
print "Diff: @diff\n";

输出:

代码语言:javascript
复制
Indexes: 0 2 4
Diff: 1 1 1 1 1
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24954380

复制
相关文章

相似问题

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