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

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

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
揭秘Perl關(guān)聯(lián)數(shù)組和哈希表聯(lián)系

本文和大家重點討論一下Perl關(guān)聯(lián)數(shù)組和哈希表的概念,Perl關(guān)聯(lián)數(shù)組,又稱為哈希表(hashtable),是一種非常好用的數(shù)據(jù)結(jié)構(gòu)。希望通過本文的介紹你對Perl關(guān)聯(lián)數(shù)組的概念有深入的了解。

十年的管城網(wǎng)站建設(shè)經(jīng)驗,針對設(shè)計、前端、開發(fā)、售后、文案、推廣等六對一服務(wù),響應(yīng)快,48小時及時工作處理。成都營銷網(wǎng)站建設(shè)的優(yōu)勢是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動調(diào)整管城建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計,從而大程度地提升瀏覽體驗。創(chuàng)新互聯(lián)建站從事“管城網(wǎng)站設(shè)計”,“管城網(wǎng)站推廣”以來,每個客戶項目都認真落實執(zhí)行。

Perl關(guān)聯(lián)數(shù)組和哈希表

Perl關(guān)聯(lián)數(shù)組,又稱為哈希表(hashtable),是一種非常好用的數(shù)據(jù)結(jié)構(gòu)。

在程序中,我們可能會遇到需要消重的問題,舉一個最簡單的模型:

有一份用戶名列表,存儲了10000個用戶名,沒有重復項;
還有一份黑名單列表,存儲了2000個用戶名,格式與用戶名列表相同;
現(xiàn)在需要從用戶名列表中刪除處在黑名單里的用戶名,要求用盡量快的時間處理。

這個問題是一個小規(guī)模的處理量,如果實際一點,2個表都可能很大,比如有2億條記錄。

我最開始想到的方法,就是做一個嵌套的循環(huán),設(shè)用戶名表有M條記錄,黑名單列表有N條記錄,那么,循環(huán)的次數(shù)是M*N次!
PHP版代碼:

 
 
 
  1. foreach($arrayMas$keyM=>$nameM){  
  2. foreach($arrayNas$nameN){  
  3. if($nameM==$nameN){  
  4. //本行執(zhí)行了M*N次!  
  5. unset($arrayM[$keyM]);  
  6. }  
  7. }  
  8. }  
  9. return$arrayM;  
  10. ?> 
  11.  

另一種方式,利用數(shù)組索引。

PHP是一種弱類型的語言,不像C語言那樣有嚴格的變量類型限制。C語言的數(shù)組,每一個元素的類型必須一致,而且索引都是從0開始。
PHP的數(shù)組,可以用字符串作為索引,也稱為Perl關(guān)聯(lián)數(shù)組。
數(shù)組索引,有一個天然的限制就是不會重復,而且訪問的時候不需要查找,可以直接定位。

還是剛才的那個問題,我們采用另一種辦法。

把黑名單列表的用戶名組織到一個數(shù)組里,數(shù)組的索引就是用戶名。

然后,遍歷用戶列表的時候,只需直接用isset查詢那個用戶名是否存在即可。

PHP版代碼:

 
 
 
  1. $arrayarrayHash=array();  
  2. foreach($arrayNas$nameN){  
  3. //本行執(zhí)行了N次。  
  4. $arrayHash[$nameN]=1;  
  5. }  
  6.  
  7. foreach($arrayMas$keyM=>$nameM){  
  8. if(isset($arrayHash[$nameM])){  
  9. //本行執(zhí)行了M次!  
  10. unset($arrayM[$keyM]);  
  11. }  
  12. }  
  13. return$arrayM;  
  14. ?> 
  15.  

可以看到,優(yōu)化過的代碼,循環(huán)次數(shù)是M+N次。

假如M和N都是10000,優(yōu)化前,循環(huán)了1億次;優(yōu)化后,只循環(huán)了20000次,差了5000倍!
如果第二個程序耗時1秒,則第一個程序需要將近一個半小時!

最近在做Perl的開發(fā),Perl在處理文本的時候有很高的效率,同樣,它也支持Perl關(guān)聯(lián)數(shù)組!

只是語法和PHP的那種類C的方式有很大不同,以第二段代碼為例,Perl版的實現(xiàn):

 
 
 
  1.  #!/usr/bin/perl  
  2. my%arrayHash;  
  3. for(my$i=0;$i<@arrayN;++$i){  
  4. $arrayHash{$arrayN[$i]}=1;  
  5. }  
  6.  
  7. for(my$i=0;$i<@arrayM;++$i){  
  8. if($arrayHash{$arrayM[$i]}){  
  9. $arrayM[$i]=undef;  
  10. }  
  11. }  
  12.  

Perl關(guān)聯(lián)數(shù)組是@開頭,哈希是以%開頭,unset實際上就是undef。
Perl的哈希和數(shù)組都是有具體類型的,而且向函數(shù)傳遞變量的時候要傳引用,我剛學時間不長,快被搞暈了。

不過,現(xiàn)在剛剛實現(xiàn)了一個以hash方式進行IP位置查找的算法,平均比較次數(shù)大概在3次左右,比傳統(tǒng)的折半查找方式少了很多次,它大概需要8次以上的比較。
剛剛做了一個小的性能測試,對10萬個IP進行查找,在我的臺式機上,耗時15秒,平均每秒7500次,感覺還不錯,呵呵。不過,還是喜歡PHP的數(shù)組,真的很強大 。


網(wǎng)頁題目:揭秘Perl關(guān)聯(lián)數(shù)組和哈希表聯(lián)系
當前鏈接:http://www.5511xx.com/article/djocpce.html