perl案例區(qū)分圖文說明教程之12
發(fā)表時(shí)間:2024-06-10 來源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]六、從數(shù)組變量復(fù)制到關(guān)聯(lián)數(shù)組 與列表一樣,也可以通過數(shù)組變量創(chuàng)建關(guān)聯(lián)數(shù)組,當(dāng)然,其元素?cái)?shù)目應(yīng)該為偶數(shù),如: @fruit = ("apples",17,"bananas",9,"oranges","none"); %f...
六、從數(shù)組變量復(fù)制到關(guān)聯(lián)數(shù)組
與列表一樣,也可以通過數(shù)組變量創(chuàng)建關(guān)聯(lián)數(shù)組,當(dāng)然,其元素?cái)?shù)目應(yīng)該為偶數(shù),如:
@fruit = ("apples",17,"bananas",9,"oranges","none");
%fruit = @fruit;
反之,可以把關(guān)聯(lián)數(shù)組賦給數(shù)組變量,如:
%fruit = ("grapes",11,"lemons",27);
@fruit = %fruit;
注意,此語句中元素次序未定義,那么數(shù)組變量@fruit可能為("grapes",11,"lemons",27)或("lemons",27,"grapes",11)。
關(guān)聯(lián)數(shù)組變量之間可以直接賦值,如:%fruit2 = %fruit1; 還可以把數(shù)組變量同時(shí)賦給一些簡單變量和一個(gè)關(guān)聯(lián)數(shù)組變量,如:
($var1, $var2, %myarray) = @list;
此語句把@list的第一個(gè)元素賦給$var1,第二個(gè)賦給$var2,其余的賦給%myarray。
最后,關(guān)聯(lián)數(shù)組可以通過返回值為列表的內(nèi)嵌函數(shù)或用戶定義的子程序來創(chuàng)建,下例中把split()函數(shù)的返回值--一個(gè)列表--賦給一個(gè)關(guān)聯(lián)數(shù)組變量。
1: #!/usr/local/bin/perl
2:
3: $inputline =
;
4: $inputline =~ s/^s+ s+n$//g;
5: %fruit = split(/s+/, $inputline);
6: print ("Number of bananas: $fruit{"bananas"}n");
運(yùn)行結(jié)果如下:
oranges 5 apples 7 bananas 11 cherries 6
Number of bananas: 11
七、元素的增刪
增加元素已經(jīng)講過,可以通過給一個(gè)未出現(xiàn)過的元素賦值來向關(guān)聯(lián)數(shù)組中增加新元素,如$fruit{"lime"} = 1;創(chuàng)建下標(biāo)為lime、值為1的新元素。
刪除元素的方法是用內(nèi)嵌函數(shù)delete,如欲刪除上述元素,則:
delete ($fruit{"lime"});
注意:
1、一定要使用delete函數(shù)來刪除關(guān)聯(lián)數(shù)組的元素,這是唯一的方法。
2、一定不要對關(guān)聯(lián)數(shù)組使用內(nèi)嵌函數(shù)push、pop、shift及splice,因?yàn)槠湓匚恢檬请S機(jī)的。
八、列出數(shù)組的索引和值
上面已經(jīng)提到,keys()函數(shù)返回關(guān)聯(lián)數(shù)組下標(biāo)的列表,如:
%fruit = ("apples", 9,
"bananas", 23,
"cherries", 11);
@fruitsubs = keys(%fruits);
這里,@fruitsubs被賦給apples、bananas、cherries構(gòu)成的列表,再次提請注意,此列表沒有次序,若想按字母順序排列,可使用sort()函數(shù)。
@fruitindexes = sort keys(%fruits);
這樣結(jié)果為("apples","bananas","cherries")。類似的,內(nèi)嵌函數(shù)values()返回關(guān)聯(lián)數(shù)組值的列表,如:
%fruit = ("apples", 9,
"bananas", 23,
"cherries", 11);
@fruitvalues = values(%fruits);
這里,@fruitvalues可能的結(jié)果為(9,23.11),次序可能不同。
九、用關(guān)聯(lián)數(shù)組循環(huán)
前面已經(jīng)出現(xiàn)過利用keys()函數(shù)的foreach循環(huán)語句,這種循環(huán)效率比較低,因?yàn)槊糠祷匾粋(gè)下標(biāo),還得再去尋找其值,如:
foreach $holder (keys(%records)){
$record = $records{$holder};
}
Perl提供一種更有效的循環(huán)方式,使用內(nèi)嵌函數(shù)each(),如:
%records = ("Maris", 61, "Aaron", 755, "Young", 511);
while (($holder, $record) = each(%records)) {
# stuff goes here
}
each()函數(shù)每次返回一個(gè)雙元素的列表,其第一個(gè)元素為下標(biāo),第二個(gè)元素為相應(yīng)的值,最后返回一個(gè)空列表。
注意:千萬不要在each()循環(huán)中添加或刪除元素,否則會產(chǎn)生不可預(yù)料的后果。