web-dev-qa-db-ja.com

配列の最初の5つの要素を削除するにはどうすればよいですか?

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

以下は、いくつかの方法です。

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;

確かに私は、ごちゃごちゃした方法を思いつくよりもはるかに優れたハッカーだと確信しています。 :)

53
friedo

splice ビルトインを探しています:

splice @array, 0, 5;
12
Eric Strom

splice @array, 0, 5;はそれを行います。

4
Anomie

Friedoの回答へのコメントと、クールな新しい宣言stateを示すために、ここではgrepを使用しています。これは、friedoの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; 
3
Joel Berger