自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Perl關(guān)聯(lián)數(shù)組用法詳解

開發(fā) 架構(gòu)
Perl語言中Perl關(guān)聯(lián)數(shù)組有很多值得學(xué)習(xí)的地方,那么你對Perl關(guān)聯(lián)數(shù)組的概念是否熟悉呢,本文向大家簡單介紹一下,希望本文介紹能讓你有所收獲。

本文和大家重點討論一下Perl關(guān)聯(lián)數(shù)組的概念,Perl關(guān)聯(lián)數(shù)組的下標(biāo)可以為任何簡單/標(biāo)量值,訪問單個元素時以$符號打頭,下標(biāo)用大括號圍起來。想了解Perl關(guān)聯(lián)數(shù)組的具體內(nèi)容請看本文詳細(xì)介紹。

Perl關(guān)聯(lián)數(shù)組

一、Perl關(guān)聯(lián)數(shù)組變量的限制

在前面講的數(shù)組變量中,可以通過下標(biāo)訪問其中的元素。例如,下列語句訪問數(shù)組@array的第三個元素:
$scalar=$array[2];
雖然數(shù)組很有用,但它們有一個顯著缺陷,即很難記住哪個元素存貯的什么內(nèi)容。假如我們來寫一個程序計算某文件中首字母大寫的單詞出現(xiàn)的次數(shù),用數(shù)組來實現(xiàn)就比較困難,程序代碼如下:
 

  1. 1:#!/usr/local/bin/perl  
  2. 2:  
  3. 3:while($inputline=){  
  4. 4:while($inputline=~/\b[A-Z]\S+/g){  
  5. 5:$word=$&;  
  6. 6:$word=~s/[;.,:-]$//;#removepunctuation  
  7. 7:for($count=1;$count<=@wordlist;  
  8. 8:$count++){  
  9. 9:$found=0;  
  10. 10:if($wordlist[$count-1]eq$word){  
  11. 11:$found=1;  
  12. 12:$wordcount[$count-1]+=1;  
  13. 13:last;  
  14. 14:}  
  15. 15:}  
  16. 16:if($found==0){  
  17. 17:$oldlength=@wordlist;  
  18. 18:$wordlist[$oldlength]=$word;  
  19. 19:$wordcount[$oldlength]=1;  
  20. 20:}  
  21. 21:}  
  22. 22:}  
  23. 23:print("Capitalizedwordsandnumberofoccurrences:\n");  
  24. 24:for($count=1;$count<=@wordlist;$count++){  
  25. 25:print("$wordlist[$count-1]:$wordcount[$count-1]\n");  
  26. 26:}  

 運行結(jié)果如下:

  1. HereisalineofInput.  
  2. ThisInputcontainssomeCapitalizedwords.  
  3. ^D  
  4. Capitalizedwordsandnumberofoccurrences:  
  5. Here:1  
  6. Input:2  
  7. This:1  
  8. Capitalized:1  
  9.  

 

這個程序每次從標(biāo)準(zhǔn)輸入文件讀一行文字,第四行起的循環(huán)匹配每行中首字母大寫的單詞,每找到一個循環(huán)一次,賦給簡單變量$word。在第六行中去掉標(biāo)點后,查看該單詞是否曾出現(xiàn)過,7~15行中在@wordlist中挨個元素做此檢查,如果某個元素與$word相等,@wordcount中相應(yīng)的元素就增加一個數(shù)。如果沒有出現(xiàn)過,即@wordlist中沒有元素與$word相等,16~20行給@wordlist和@wordcount增加一個新元素。

二、Perl關(guān)聯(lián)數(shù)組定義

正如你所看到的,使用數(shù)組元素產(chǎn)生了一些問題。首先,@wordlist中哪個元素對應(yīng)著哪個單詞并不明顯;更糟的是,每讀進(jìn)一個新單詞,程序必須檢查整個列表才能知道該單詞是否曾經(jīng)出現(xiàn)過,當(dāng)列表變得較大時,這是很耗費時間的。
這些問題產(chǎn)生的原因是數(shù)組元素通過數(shù)字下標(biāo)訪問,為了解決這類問題,Perl定義了另一種數(shù)組,可以用任意簡單變量值來訪問其元素,這種數(shù)組叫做Perl關(guān)聯(lián)數(shù)組,也叫哈希表。
為了區(qū)分Perl關(guān)聯(lián)數(shù)組變量與普通的數(shù)組變量,Perl使用%作為其首字符,而數(shù)組變量以@打頭。與其它變量名一樣,%后的第一個字符必須為字母,后續(xù)字符可以為字母、數(shù)字或下劃線。

三、訪問Perl關(guān)聯(lián)數(shù)組的元素

Perl關(guān)聯(lián)數(shù)組的下標(biāo)可以為任何簡單/標(biāo)量值,訪問單個元素時以$符號打頭,下標(biāo)用大括號圍起來。例如:
$fruit{"bananas"}
$number{3.14159}
$integer{-7}
簡單變量也可作為下標(biāo),如:
$fruit{$my_fruit}

四、增加元素

創(chuàng)建一個Perl關(guān)聯(lián)數(shù)組元素最簡單的方法是賦值,如語句$fruit{"bananas"}=1;把1賦給Perl關(guān)聯(lián)數(shù)組%fruit下標(biāo)為bananas的元素,如果該元素不存在,則被創(chuàng)建,如果數(shù)組%fruit從未使用過,也被創(chuàng)建。
這一特性使得Perl關(guān)聯(lián)數(shù)組很容易用于計數(shù)。下面我們用Perl關(guān)聯(lián)數(shù)組改寫上面的程序,注意實現(xiàn)同樣的功能此程序簡化了許多。

 

  1. 1:#!/usr/local/bin/perl  
  2. 2:  
  3. 3:while($inputline=){  
  4. 4:while($inputline=~/\b[A-Z]\S+/g){  
  5. 5:$word=$&;  
  6. 6:$word=~s/[;.,:-]$//;#removepunctuation  
  7. 7:$wordlist{$word}+=1;  
  8. 8:}  
  9. 9:}  
  10. 10:print("Capitalizedwordsandnumberofoccurrences:\n");  
  11. 11:foreach$capword(keys(%wordlist)){  
  12. 12:print("$capword:$wordlist{$capword}\n");  
  13. 13:}  
  14.  

 運行結(jié)果如下:

  1. HereisalineofInput.  
  2. ThisInputcontainssomeCapitalizedwords.  
  3. ^D  
  4. Capitalizedwordsandnumberofoccurrences:  
  5. This:1  
  6. Input:2  
  7. Here:1  
  8. Capitalized:1  
  9.  

 你可以看到,這次程序簡單多了,讀取輸入并存貯各單詞數(shù)目從20行減少到了7行。
本程序用Perl關(guān)聯(lián)數(shù)組%wordlist跟蹤首字母大寫的單詞,下標(biāo)就用單詞本身,元素值為該單詞出現(xiàn)的次數(shù)。第11行使用了內(nèi)嵌函數(shù)keys()。這個函數(shù)返回Perl關(guān)聯(lián)數(shù)組的下標(biāo)列表,foreach語句就用此列表循環(huán)。
注:Perl關(guān)聯(lián)數(shù)組總是隨機(jī)存貯的,因此當(dāng)你用keys()訪問其所有元素時,不保證元素以任何順序出現(xiàn),特別值得一提的是,它們不會以被創(chuàng)建的順序出現(xiàn)。
要想控制Perl關(guān)聯(lián)數(shù)組元素出現(xiàn)的次序,可以用sort()函數(shù)對keys()返回值進(jìn)行排列,如:
 

  1. foreach$capword(sortkeys(%wordlist)){  
  2. print("$capword:$wordlist{$capword}\n");  
  3. }  

【編輯推薦】 

  1. Perl if語句用法實例解析
  2. Perl文件句柄概念詳解
  3. 實例解析Perl守護(hù)進(jìn)程用法
  4. Perl模式匹配經(jīng)驗總結(jié)
  5. 術(shù)語匯編 Perl變量中Perl關(guān)聯(lián)數(shù)組用法解析

 

 

責(zé)任編輯:佚名 來源: csdn.net
相關(guān)推薦

2010-07-16 10:30:10

Perl關(guān)聯(lián)數(shù)組

2010-07-13 09:58:51

Perl關(guān)聯(lián)數(shù)組

2010-07-19 09:28:37

Perl關(guān)聯(lián)數(shù)組

2010-07-19 15:31:10

Perl關(guān)聯(lián)數(shù)組函數(shù)

2010-07-16 10:38:24

Perl關(guān)聯(lián)數(shù)組

2009-11-24 19:40:07

PHP關(guān)聯(lián)數(shù)組查詢結(jié)果

2009-11-17 17:07:01

PHP關(guān)聯(lián)數(shù)組

2010-07-19 16:25:06

Perl數(shù)組

2010-07-20 15:02:20

Perl數(shù)組

2010-07-23 13:53:33

Perl grep函數(shù)

2010-07-21 13:59:59

Perl引用

2010-07-16 16:40:48

Perl引用

2010-07-16 09:50:23

Perl控制結(jié)構(gòu)

2010-07-13 09:50:55

Perl數(shù)組

2010-12-15 09:10:01

PHP關(guān)聯(lián)數(shù)組

2009-11-24 19:25:32

PHP關(guān)聯(lián)數(shù)組

2010-07-20 13:02:08

Perl數(shù)組

2010-07-20 15:36:58

Perl語法

2010-07-19 13:06:13

Perl二維數(shù)組

2010-07-16 13:50:53

Perl哈希表
點贊
收藏

51CTO技術(shù)棧公眾號