如何删除数组的前五个元素?

时间:2011-02-27 02:55:39

标签: arrays perl list

@array = qw(one two three four five six seven eight);
<Some command here>
print @array;

5 个答案:

答案 0 :(得分:52)

以下是一些方法,以愚蠢的顺序递增:

使用slice

@array = @array[ 5 .. $#array ];

使用splice

splice @array, 0, 5;

使用shift

shift @array for 1..5;

使用grep

my $cnt = 0;
@array = grep { ++$cnt > 5 } @array;

使用map

my $cnt = 0;
@array = map { ++$cnt < 5 ? ( ) : $_ } @array;

我确信黑客远比我能提出更好的黑客方式。 :)

答案 1 :(得分:11)

您正在寻找splice内置:

splice @array, 0, 5;

答案 2 :(得分:4)

splice @array, 0, 5;会这样做。

答案 3 :(得分:3)

作为对friedo答案的评论并展示很酷的新声明state,这里使用的是grep,其中的map模仿了#!/usr/bin/perl use strict; use warnings; use feature 'state'; my @array = qw(one two three four five six seven eight); my @new_array = grep {state $count; ++$count > 5} @array; print "$_\n" for @new_array;

{{1}}

答案 4 :(得分:-2)

我刚刚意识到你只需要最后一个字符串,所以不需要循环

   my $_ = "@array"; s|(?:.*?\s){5}||;say;

顺便说一句,这可能是效率最低的方式,只是玩得开心:)