[譯]Perl中的數組


原文:http://perl5maven.com/perl-arrays


在本篇Perl教程中,我們將會學習Perl中的數組.本文只是對Perl中的數組進行了一下概述,在以后的文章中,我們還會更加詳細的講解.

在Perl中,數組類型的變量名稱以@符號開頭.

因為我們堅決要求在自己的代碼中使用嚴格模式(use strict),所以在使用數組變量前,你必須使用my關鍵字來聲明它.

要注意,我們假定本文中所有的代碼示例都已經包含了下面這樣的文件頭:

use strict;
use warnings;
use 5
.010;

首先,聲明一個數組變量是這樣寫的:

my @names;

然后是聲明變量的同時並進行初始化:

my @names=("Foo","Bar","Baz");

打印數組

use Data::Dumper qw(Dumper);

my @names = ("Foo","Bar","Baz");
say Dumper
\@names;

輸出結果如下:

$VAR1 =[
'Foo',
'Bar',
'Baz' ];

遍歷數組

my @names = ("Foo","Bar","Baz");
foreach my $n (@names){
  say
$n;
}

輸出結果如下:

Foo
Bar
Baz

訪問數組元素

my @names = ("Foo","Bar","Baz");
say
$names[0];

這里需要特別注意的是:當訪問某單個的數組元素的時候,變量名的前導符號應該使用$,而不是原來的@.有些人也許不理解為什么要這么做,但其實原因也很簡單.

你只需要理解:@符號表示雙數,而$符號表示單數.當訪問單個的數組元素時,該元素表現的完全和普通標量變量相同,所以要用$.

獲取數組中的最大索引號

數組的索引號最小從0開始,最大索引號的值可以通過$#name_of_the_array變量獲取到,所以:

my @names = ("Foo","Bar","Baz");
say $
#names;

會輸出2,因為數組的索引號只有3個:0,1,2.

計算數組長度

在Perl中,並沒有一個專門用來獲取數組長度的函數,但是還是可以通過其他方法獲取到的.第一種辦法就是:數組的長度其實就是數組的最大索引號加1,因此,如果想獲取上例中的數組(@names)的長度,則可以使用表達式$#names+1來計算得出.

另外,還可以使用scalar函數來獲取數組的長度:

my @names = ("Foo","Bar","Baz");
say
scalar @names;

上例將會輸出3.

遍歷數組索引

在某些情況下,我們不光需要遍歷到數組元素的值,還需要遍歷到元素值對應的索引.這種情況下,我們就需要這么做:

my @names = ("Foo","Bar","Baz");
foreach my $i (0.. $#names) { say "$i - $names[$i]";
}

輸出結果如下:

0-Foo
1-Bar
2-Baz

Push函數

push函數會在原數組的最右邊插入一個新的數組元素.

use Data::Dumper qw(Dumper);

my
@names = ("Foo","Bar","Baz");
push @names,'Moo';

say Dumper
\@names;

輸出結果如下:

$VAR1 =[
'Foo',
'Bar',
'Baz',
'Moo' ];

Pop函數

pop函數會從原數組中刪除最右邊的那個數組元素,並且返回刪掉的那個元素.

use Data::Dumper qw(Dumper);

my
@names = ("Foo","Bar","Baz");
my $last_value = pop @names;
say
"Last: $last_value";
say Dumper
\@names;

輸出結果如下:

Last:Baz
$VAR1 =[
'Foo',
'Bar', ];

shift函數

shift函數會從原數組中刪除最左邊的那個數組元素,並且返回刪掉的那個元素.

use Data::Dumper qw(Dumper);
my @names = ("Foo","Bar","Baz");

my $first_value = shift @names;
say
"First: $first_value";
say Dumper
\@names;

輸出結果如下:

First:Foo
$VAR1 =[
'Bar',
'Baz', ];


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM