四、增加元素
創(chuàng)建一個(gè)關(guān)聯(lián)數(shù)組元素最簡單的方法是賦值,如語句$fruit{"bananas"} = 1; 把1賦給關(guān)聯(lián)數(shù)組%fruit下標(biāo)為bananas的元素,如果該元素不存在,則被創(chuàng)建,如果數(shù)組%fruit從未使用過,也被創(chuàng)建。 這一特性使得關(guān)聯(lián)數(shù)組很容易用于計(jì)數(shù)。下面我們用關(guān)聯(lián)數(shù)組改寫上面的程序,注意實(shí)現(xiàn)同樣的功能此程序簡化了許多。
1 : #!/usr/local/bin/perl 2 : 3 : while ($inputline = ) { 4 : while ($inputline =~ /b[A-Z]S+/g) { 5 : $word = $&; 6 : $word =~ s/[;.,:-]$//; # remove punctuation 7 : $wordlist{$word} += 1; 8 : } 9 : } 10: print ("Capitalized words and number of occurrences:n"); 11: foreach $capword (keys(%wordlist)) { 12: print ("$capword: $wordlist{$capword}n"); 13: }
運(yùn)行結(jié)果如下:
Here is a line of Input. This Input contains some Capitalized words. ^D Capitalized words and number of occurrences: This: 1 Input: 2 Here: 1 Capitalized: 1
你可以看到,這次程序簡單多了,讀取輸入并存貯各單詞數(shù)目從20行減少到了7行。 本程序用關(guān)聯(lián)數(shù)組%wordlist跟蹤首字母大寫的單詞,下標(biāo)就用單詞本身,元素值為該單詞出現(xiàn)的次數(shù)。第11行使用了內(nèi)嵌函數(shù)keys()。這個(gè)函數(shù)返回關(guān)聯(lián)數(shù)組的下標(biāo)列表,foreach語句就用此列表循環(huán)。 注:關(guān)聯(lián)數(shù)組總是隨機(jī)存貯的,因此當(dāng)你用keys()訪問其所有元素時(shí),不保證元素以任何順序出現(xiàn),特別值得一提的是,它們不會(huì)以被創(chuàng)建的順序出現(xiàn)。 要想控制關(guān)聯(lián)數(shù)組元素出現(xiàn)的次序,可以用sort()函數(shù)對keys()返回值進(jìn)行排列,如:
foreach $capword (sort keys(%wordlist)) { print ("$capword: $wordlist{$capword}n"); }
五、創(chuàng)建關(guān)聯(lián)數(shù)組
可以用單個(gè)賦值語句創(chuàng)建關(guān)聯(lián)數(shù)組,如: %fruit = ("apples",17,"bananas",9,"oranges","none"); 此語句創(chuàng)建的關(guān)聯(lián)數(shù)組含有下面三個(gè)元素:
下標(biāo)為apples的元素,值為17 下標(biāo)為bananas的元素,值為9 下標(biāo)為oranges的元素,值為none 注:用列表給關(guān)聯(lián)數(shù)組賦值時(shí),Perl5允許使用"=>"或","來分隔下標(biāo)與值,用"=>"可讀性更好些,上面語句等效于: %fruit = ("apples"=>17,"bananas"=>9,"oranges"=>"none");
|