三,列表和陣列(筆記)
列表(list)指的是標量的有序集會,而陣列(array)則是儲存列表的變數。更精確的說,列表指的是資料,而陣列指的是變數。列表值可以不放
在陣列裡,但每個陣列變數都一定包含一個列表。
1, 訪問陣列中的元素
陣列元素是以連續的整數來編號,從0開始,之後的每一個元素一次加上1。
$fred[0] = "yabba";
$fred[1] = "dabba";
$fred[2] = "doo";
陣列名本身的名稱空間(namespace)和標量名稱是完全分開的。你可以在同一個程式裡再取一個名為$fred的標量變數,perl會將兩者當成不
同的東西,而不會將其混淆。
2,特殊的陣列索引值
假如你對索引值超過陣列尾端的元素進行賦值,陣列將會依需要自動擴大--只要有可用的記憶體配置給perl,陣列的長度是沒有限制的。必要
時,插入的元素會自動產生並設成undef值。
$rocks[0] = ' bedrock '; #一個元素。。
$rocks[1] = ' slate '; #另一個
$rocks[2] = ' lava '; #再來一個
$rocks[3] = ' crushed rock '; #再來一個
$rocks[99] = ' schist '; #產生95個undef元素
有時候,你會想找出陣列裡最後一個元素的索引值。對我們正在使用的陣列rocks而言,最後一個元素的索引值是$#rocks.但是$#rocks並不
是元素的個數,因為還多出一個編號為0的元素。
$rocks[-1] = ' hard rock '; #最後一個元素
3,列表直接量
列表直接量(程式中用來表示列表值的方法)是圓括號內一串以逗號分隔的值,這些值構成了列表中的元素。
(1,2,3) #包含1,2,3這3個數字的列表
(1...100) #100個整數所構成的列表
上例中最後一個用到了第一次出現的範圍運算子(range operator),即...。這個運算子會由左邊的標量計數的右邊,每次加1,以產生
一連串的數值。
列表也可以包含任何標量值。
("fred", "barney", "betty", "wilma", "dino")
4, qw簡寫
在perl程式裡,經常需要建立簡單的單詞列表(如同前面的範例)。這時只需要用qw簡寫,便可以省去鍵入一堆額外引號的時間;
qw / fred barney betty wilma dino /
其實perl允許你以任何標點符號為界定符。例如:
qw # fred barney betty wilma dino #
qw { fred barney betty wilma dino }
qw [ fred barney betty wilma dino ]
5, 列表的賦值
像標量值可以賦值給變數一樣;列表值也可以賦值到變數
($fred,$barney,$dino) = ("flintstone" , " rubble ", undef);
($rocks[0],$rocks[1],$rocks[2],$rocks[3]) = qw / talc mica feldspar quartz /;
當希望引用整個陣列時,perl提供了一個比較簡單的符號。只要在陣列名之前加上@符號,就可以立即使用整個陣列。這個符號在賦值操作
符的兩邊都可以使用。
@rocks = qw / bedrock slate lava /;
@stuff = (@rocks,undef,@rocks);
將某個陣列複製到另外一個陣列
@copy = @quarry;
6, pop和push運算子
pop運算子可用來取出陣列中的最後一個元素並且將它返回
@array = 5...9;
$fred = pop(@array); # $fred變成9, @array現在是(5,6,7,8)
$barney = pop @array; # $barney變成8, @array現在是(5,6,7)
pop @array; # @array現在是(5,6)
和pop相反的運算子是push,它會新增一個元素(或是一串元素)到陣列的尾端;
push(@array,0); # @array現在是(5,6,0)
push @array,8 # @array現在是(5,6,0,8)
push @array,1..10;
@others = qw / 9 0 2 1 0 /;
push @array,@others;
7, shift和unshift運算子
push和pop運算子所處理的是陣列的尾端,相對的unshift和shift運算子則對應陣列的開頭
8,在字串內替換陣列
和標量一樣,陣列值可以被替換到雙引號內的字串裡。陣列中的相鄰元素在替換時會自動新增空格作為換行符。
陣列的單一元素在替換是被替換成相應的元素值。
9,foreach控制結構
能夠一次處理整個陣列或列表相當的方便,所以perl提供了一種控制結構來做這件事,foreach迴圈會逐項處理列表的值,每次對一個值執
行迴圈裡的操作:
foreach $rock (qw/ bedrock slate lava /){
print "one rock is $rock.
";
}
10,perl最愛的預設變數:$_
假如你在foreach迴圈的開頭省略了控制變數,perl會使用它最愛的預設變數,$_.
foreach (1..10){
print "I can count to $_!
";
}
11, reverse運算子
reverse運算子會讀取列表的值(可能來自陣列)並依相反的次序返回該列表
@fred = 6..10;
@barney = reverse(@fred);
@fred = reverse @fred;
12, sort運算子
sort運算子會讀取列表的值(可能來自陣列),而且會根據字元編碼的順序對它們進行排序。
13,強制指定標量上下文
使用假函式scalar,它並不是真正的函式,因為它只是告訴perl必須提供標量上下文。
14,列表上下文中的
@lines =
chomp(@line); #忽略所有的換行符
簡潔的方法:
chomp (@lines =
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/312079/viewspace-245687/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Per語言入門第4版學習筆記-第三章列表和陣列R語言筆記陣列
- Java 學習筆記 二維陣列和物件陣列Java筆記陣列物件
- GO 筆記-陣列Go筆記陣列
- JS 陣列筆記JS陣列筆記
- 陣列筆記1陣列筆記
- 用三列二維陣列表示的稀疏矩陣類陣列矩陣
- IOS筆記之陣列iOS筆記陣列
- JavaScript筆記(6)陣列JavaScript筆記陣列
- 【筆記】字尾陣列筆記陣列
- 陣列和列表的轉換問題陣列
- JavaScript學習筆記(二)——函式和陣列JavaScript筆記函式陣列
- C++ ——vector陣列筆記C++陣列筆記
- iOS筆記之陣列排序iOS筆記陣列排序
- JS陣列學習筆記JS陣列筆記
- 陣列分割——解題筆記陣列筆記
- 【筆記】oracle 陣列實現筆記Oracle陣列
- 【筆記/模板】樹狀陣列筆記陣列
- 第23章:列表、陣列和雜湊表陣列
- 資料結構筆記整理和思考--動態陣列和靜態陣列的領悟資料結構筆記陣列
- Java學習筆記【1】陣列的宣告和建立Java筆記陣列
- Swift學習筆記第三篇(字串,陣列,集合,字典)Swift筆記字串陣列
- 泛型陣列列表ArrayList泛型陣列
- c++筆記_多維陣列C++筆記陣列
- 學習筆記——陣列方法整理筆記陣列
- Java學習筆記之陣列Java筆記陣列
- 學習筆記----樹狀陣列筆記陣列
- swift 學習筆記之陣列Swift筆記陣列
- 學習筆記----字尾陣列筆記陣列
- [筆記] 解碼Nginx:陣列(Array)筆記Nginx陣列
- 字尾陣列 學習筆記陣列筆記
- 字尾陣列學習筆記陣列筆記
- 【numpy學習筆記】陣列的儲存和下載筆記陣列
- 【numpy學習筆記】陣列的建立和基本運算筆記陣列
- (三)陣列陣列
- JavaScript 學習筆記 - 多維陣列變為一維陣列JavaScript筆記陣列
- 陣列累加和問題三連陣列
- Python列表建立NumPy陣列Python陣列
- JS常用陣列方法總結筆記JS陣列筆記