日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
Perl關(guān)聯(lián)數(shù)組用法詳解

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

創(chuàng)新互聯(lián)公司專注于石臺(tái)企業(yè)網(wǎng)站建設(shè),成都響應(yīng)式網(wǎng)站建設(shè)公司,商城建設(shè)。石臺(tái)網(wǎng)站建設(shè)公司,為石臺(tái)等地區(qū)提供建站服務(wù)。全流程按需制作網(wǎng)站,專業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,創(chuàng)新互聯(lián)公司專業(yè)和態(tài)度為您提供的服務(wù)

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

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

在前面講的數(shù)組變量中,可以通過(guò)下標(biāo)訪問(wèn)其中的元素。例如,下列語(yǔ)句訪問(wèn)數(shù)組@array的第三個(gè)元素:
$scalar=$array[2];
雖然數(shù)組很有用,但它們有一個(gè)顯著缺陷,即很難記住哪個(gè)元素存貯的什么內(nèi)容。假如我們來(lái)寫一個(gè)程序計(jì)算某文件中首字母大寫的單詞出現(xiàn)的次數(shù),用數(shù)組來(lái)實(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:}  

 運(yùn)行結(jié)果如下:

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

 

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

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

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

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

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

四、增加元素

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

 運(yùn)行結(jié)果如下:

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

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

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

網(wǎng)頁(yè)名稱:Perl關(guān)聯(lián)數(shù)組用法詳解
文章分享:http://m.5511xx.com/article/ccccccc.html