當前位置:首頁 » Perl » Perl數組

Perl數組

Perl數組變量,實例,使用例子教學:標量變量簡單變量隻包含一個元素 - 一個字符串或數字。

一個數組隻是一組標量.。它是由個彆標量存儲在一個單一變量的列表。你可以參考每個標內,使用數字索引列表。

數組創建:

數組變量的前綴@符號和填充使用任何括號或qw操作符,例如:

@array = (1, 2, 'Hello');
@array = qw/This is an array/;

第二條生產線使用的qw//運算符,它返回一個字符串列表,由空格分隔的字符串分開。在這個例子中,這導致了四元素的數組第一個元素是“this”和最後(四)是“array”。這意味著你可以使用規範內的換行符:

@days = qw/Monday
Tuesday
...
Sunday/;

我們也可以單獨指定每個值填充數組:

$array[0] = 'Monday';
...
$array[6] = 'Sunday';

提取個彆指數

從數組中提取單個元素時,你必須在前麵加上一個美元符號變量,然後追加後,方括號內的元素的索引的名稱。例如:

#!/usr/bin/perl

@shortdays = qw/Mon Tue Wed Thu Fri Sat Sun/;
print $shortdays[1];

This will print
Tue
數組索引從零開始,所以在前麵的例子實際上we.ve印有“星期二”。你也可以給,而不是開始一個負index.in這種情況下,你選擇從最後的數組元素。
print $shortdays[0]; # Outputs Mon
print $shortdays[6]; # Outputs Sun
print $shortdays[-1]; # Also outputs Sun
print $shortdays[-7]; # Outputs Mon

序列數字陣列

Perl提供了一個連續的數字和字母的捷徑。而不是鍵入每個元素,例如,以100計數時,我們可以這樣做:

#!/usr/bin/perl

@10 = (1 .. 10);
@100 = (1 .. 100;
@1000 = (100 .. 1000);
@abc = (a .. z);

print "@10";   # Prints number starting from 1 to 10
print "@100";  # Prints number starting from 1 to 100
print "@1000"; # Prints number starting from 1 to 1000
print "@abc";  # Prints number starting from a to z

數組的大小

數組的大小可以決定在陣列上使用標量上下文 - 返回值將數組中的元素數量:

@array = (1,2,3);
print "Size: ",scalar @array,"\n";

返回的值總是會陣列的物理尺寸,而不是有效的元素數量。可以證明這一點,標量,@array和$#array之間的區彆,使用此片段:

#!/uer/bin/perl

@array = (1,2,3);
$array[50] = 4;

print "Size: ",scalar @array,"\n";
print "Max Index: ", $#array,"\n";

This will return
Size: 51
Max Index: 50

隻有四個元素的數組中包含的信息,但數組是51元素長50指數(索引)最高,.

這裡標量函數是用來執行標量上下文,使@數組可以返回數組的大小,否則將返回@陣列的所有在它contacined的元素的列表.

數組中添加和刪除元素

使用添加/刪除以下功能和元素:

  • push(): 數組的末尾添加一個元素.

  • unshift(): 添加一個元素的數組的開頭.

  • pop(): 刪除數組中最後一個元素.

  • shift() : 刪除數組的第一個元素.

使用push()或shift()添加元素時,你必須指定兩個參數,第一個數組名和第二個元素的名稱添加。pop()或shift()刪除一個元素,隻需要您發送數組作為參數.

#!/usr/bin/perl

# Define an array
@coins = ("Quarter","Dime","Nickel");
print "First Statement : @coins";
print "\n";

# Add one element at the end of the array push(@coins, "Penny");
print "Second Statement : @coins - by www.gitbook.net";
print "\n";
# Add one element at the beginning of the array unshift(@coins, "Dollar");
print "Third Statement : @coins";
print "\n";

# Remove one element from the last of the array. pop(@coins);
print "Fourth Statement : @coins";
print "\n";
# Remove one element from the beginning of the array. shift(@coins);
print "Fifth Statement : @coins";
print "@coins";


Now this will produce following result
First Statement : Quarter Dime Nickel
Second Statement : Quarter Dime Nickel Penny 
Third Statement : Dollar Quarter Dime Nickel Penny
Fourth Statement : Dollar Quarter Dime Nickel
Fifth Statement : Quarter Dime Nickel

切片數組元素

你也可以從一個數組中提取的“切片” - 也就是說,你可以選擇多個項目,從一個數組,以產生另一個數組.

@weekdays = @shortdays[0,1,2,3,4];

的一個有效的指標清單,積極或消極的,每個片的規格必須以逗號分隔。為了操作速度,你也可以使用......範圍操作符:

@weekdays = @shortdays[0..4];

範圍也可以在列表:

@weekdays = @shortdays[0..2,6,7];

更換數組元素

更換元素可能是splice()函數。 splice()的需要少數的參數和公式如下:

splice(@array,first-element,sequential_length, new elements) 

從本質上講,你送PERL的一個數組拚接,然後直接到起始元素計算通過,以取代有多少元素,然後填寫缺少的元素與新的信息.

#!/usr/bin/perl

@nums = (1..20);
splice(@nums, 5,5,21..25); 
print "@nums";

這裡實際更換後開始的第五元素,與6號開始。五個元素,然後替換從6-10號碼21-25

轉換字符串到數組

與split函數,它是可以轉換成一個字符串數組。要做到這一點,隻需定義一個數組,並設置它等於一個分裂的功能。 Split函數需要兩個參數,第一個字符的分裂和字符串變量.

#!/usr/bin/perl

# Define Strings
$astring = "Rain-Drops-On-Roses-And-Whiskers-On-Kittens";
$namelist = "Larry,David,Roger,Ken,Michael,Tom";

# Strings are now arrays. Here '-' and ',' works as delimeter -by www.gitbook.net
@array = split('-',$astring);
@names = split(',',$namelist);

print $array[3];  # This will print Roses
print "\n";       # This is a new line
print $names[4];  # This will print Michael

同樣,我們可以使用join()函數歸隊數組元素,形成一個長的串標.

#!/usr/bin/perl

# Define Strings
$astring = "Rain-Drops-On-Roses-And-Whiskers-On-Kittens";
$namelist = "Larry,David,Roger,Ken,Michael,Tom";

# Strings are now arrays. Here '-' and ',' works as delimeter
@array = split('-',$astring);
@names = split(',',$namelist);

$string1 = join(",", @array);
$string2 = join("-", @names);

print $string1;
print "\n" ;
print $string2;


This will produce following result
Rain,Drops,On,Roses,And,Whiskers,On,Kittens
Larry-David-Roger-Ken-Michael-Tom

數組排序

sort()函數排序每個元素數組按照ASCII數字標準.

#!/usr/bin/perl

# Define an array
@foods = qw(pizza steak chicken burgers);
print "Before sorting: @foods\n";

# Sort this array
@foods = sort(@foods);
print "After sorting: @foods\n -by www.gitbook.net";

This will produce following result
Before sorting: pizza steak chicken burgers
After sorting: burgers chicken pizza steak

請注意,基於ASCII的話數值進行排序。所以最好的辦法是先轉換成小寫字母數組的每個元素,然後執行排序功能.

特殊變量$ [

$[是一個特殊的變量。這個特彆的變量是一個標量,包含所有陣列的第一個索引。因為Perl數組從零開始的索引,幾乎始終為0。但是,如果你設置$[1,那麼你所有的陣列將使用的索引。建議不要使用除零以外的任何其他索引.

列表

名單實際上是一種特殊的數組類型 - 基本上,列表是一個臨時的結構,擁有一係列值。列表清單中可以使用括號和逗號運算符生成的“手”,

@array = (1,2,3);

或者它可以是一個函數或變量返回的值時,在列表環境計算:

print join(',' @array);

在這裡,@array正在計算在列表上下文中,因為連接函數預期的列表.

合並列表(或數組)

因為僅僅是一個逗號分隔的值的序列的列表,你可以結合列表的同時並:

@numbers = (1,3,(4,5,6));

嵌入的清單隻是成為主要list.this的一部分,也意味著我們可以結合在一起陣列:

@numbers = (@odd,@even);

返回列表也可以嵌入到產生一個單一的,最終名單的功能:

@numbers = (primes(),squares());

從列表中選擇元素

列表符號是相同的陣列 - 你可以從數組中提取元素,由方括號內追加到列表中,並給予一個或多個索引:

#!/usr/bin/perl

$one = (5,4,3,2,1)[4];

print "Value of \$one is $one\n - by www.gitbook.net "

This will produce follwoing result
Value of $one is 1

同樣,我們可以提取片,雖然冇有領先@character的要求:

#!/usr/bin/perl

@newlist = (5,4,3,2,1)[1..3];

print "value of new list is @newlist\n";

This will produce follwoing result
value of new list is 4 3 2