在perl中以相反顺序打印数组元素

在perl中以相反顺序打印数组元素,perl,Perl,当我不知道列表计数时,我尝试以相反的顺序打印数组的元素,从最后一个元素到第0个元素,而不使用反转函数。这是输入和输出 #!/usr/bin/perl/ use warnings; use strict; @months = (January, February, March, April, May, June, July, August); print @months[-6 .. 0]; print @months[-1 .. 0]; 它给我的输出是 MarchAprilMayJuneJul

当我不知道列表计数时,我尝试以相反的顺序打印数组的元素,从最后一个元素到第0个元素,而不使用反转函数。这是输入和输出

#!/usr/bin/perl/
use warnings;
use strict;

@months = (January, February, March, April, May, June, July, August);
print @months[-6 .. 0];
print @months[-1 .. 0];
它给我的输出是

MarchAprilMayJuneJulyAugustJanuary
AugustJanuary
但我想要的是,它应该打印出来

AugustJulyJuneMayAprilMarchFebruaryJanuary
谁能帮忙吗。我是perl初学者

在伪代码中:

while array is not empty
    element ← pop from array
    print element
end
我将把它作为一个练习留给您查找函数的实际名称。☺

在伪代码中:

while array is not empty
    element ← pop from array
    print element
end
@months[-6 .. 0], @months[-1 .. 0]
我将把它作为一个练习留给您查找函数的实际名称。☺

@months[-6 .. 0], @months[-1 .. 0]

意味着

但是你想要

@months[-1, -2, -3, -4, -5, -6, -7, -8]
或者干脆

@months[7, 6, 5, 4, 3, 2, 1, 0]
显而易见的解决办法是

reverse(@months)
其他有效的表达方式:

@months[ map { -$_ } 1..@months ]

@months[ map { $#months-$_ } 0..$#months ]

map { $months[-$_] } 1..@months

map { $months[ $#months-$_ ] } 0..$#months

use feature qw( current_sub );
sub { @_ ? pop(@_), __SUB__->(@_) : () }->(@months)

do { my @reversed; for my $month (@months) { unshift(@reversed, $month) } @reversed }
就地解决方案:

for (0..@months/2-1) {
   ($month[$_], $month[-$_-1]) = ($month[-$_-1], $month[$_]);
}

意味着

但是你想要

@months[-1, -2, -3, -4, -5, -6, -7, -8]
或者干脆

@months[7, 6, 5, 4, 3, 2, 1, 0]
显而易见的解决办法是

reverse(@months)
其他有效的表达方式:

@months[ map { -$_ } 1..@months ]

@months[ map { $#months-$_ } 0..$#months ]

map { $months[-$_] } 1..@months

map { $months[ $#months-$_ ] } 0..$#months

use feature qw( current_sub );
sub { @_ ? pop(@_), __SUB__->(@_) : () }->(@months)

do { my @reversed; for my $month (@months) { unshift(@reversed, $month) } @reversed }
就地解决方案:

for (0..@months/2-1) {
   ($month[$_], $month[-$_-1]) = ($month[-$_-1], $month[$_]);
}
仅打印元素

或者,正如

ikegami先前的回答中包含的原始帖子

无反转功能

打印5 4 3 2 1

仅打印元素

或者,正如

ikegami先前的回答中包含的原始帖子

无反转功能

打印5 4 3 2 1


这是另一种处理可变数量元素的通用方法,从数组开始,从最后一个元素到第一个元素,顺序相反:

my @months = (January, February, March, April, May, June, July, August);

for (my $i = $#months; $i >= 0; $i--) { 
  print $months[$i];
} 

这是另一种处理可变数量元素的通用方法,从数组开始,从最后一个元素到第一个元素,顺序相反:

my @months = (January, February, March, April, May, June, July, August);

for (my $i = $#months; $i >= 0; $i--) { 
  print $months[$i];
} 

为什么不使用反转功能。?似乎很武断。@zdim这是学术练习的一部分,这样做。@zdim-我猜这可能是家庭作业…打印$months[-$\ux]1..@months;为什么不使用反转功能。?似乎很武断。@zdim这是学术练习的一部分,这样做。@zdim-我猜这可能是家庭作业…打印$months[-$\ux]1..@months;如果答案重叠就可以了;你不需要为它辩解:@ikegami谢谢你这么说:尽管这部电影的“历史”很有趣-我当时只是贴了底部,然后向上看。。。你的答案就在这里!所以我删除了它。。。后来我又加了一条,如果答案重叠就可以了;你不需要为它辩解:@ikegami谢谢你这么说:尽管这部电影的“历史”很有趣-我当时只是贴了底部,然后向上看。。。你的答案就在这里!所以我删除了它。。。后来我又加了一块