成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

揭秘Perl關聯數組和哈希表聯系

開發 架構
Perl語言中Perl關聯數組有很多值得學習的地方,這里向大家簡單介紹一下Perl關聯數組的概念,希望本文的介紹能讓你有所收獲。

本文和大家重點討論一下Perl關聯數組和哈希表的概念,Perl關聯數組,又稱為哈希表(hashtable),是一種非常好用的數據結構。希望通過本文的介紹你對Perl關聯數組的概念有深入的了解。

Perl關聯數組和哈希表

Perl關聯數組,又稱為哈希表(hashtable),是一種非常好用的數據結構。

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

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

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

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

 

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

 

另一種方式,利用數組索引。

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

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

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

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

PHP版代碼:

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

可以看到,優化過的代碼,循環次數是M+N次。

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

最近在做Perl的開發,Perl在處理文本的時候有很高的效率,同樣,它也支持Perl關聯數組!

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

 

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

 

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

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

  1. Perl關聯數組用法集錦
  2. Perl文件句柄概念詳解
  3. 術語匯編 Perl變量中Perl關聯數組用法解析
  4. Perl關聯數組用法詳解
  5. 學習筆記 如何用Perl關聯數組創建數據結構
責任編輯:佚名 來源: csdn.net
相關推薦

2010-07-16 10:30:10

Perl關聯數組

2010-07-16 10:20:46

Perl關聯數組

2010-07-13 16:20:21

Perl 哈希表

2010-07-13 09:58:51

Perl關聯數組

2010-07-16 13:50:53

Perl哈希表

2010-07-16 10:38:24

Perl關聯數組

2010-07-19 15:31:10

Perl關聯數組函數

2010-07-21 13:53:07

Perl引用

2010-07-13 16:34:34

Perl 哈希表

2010-07-26 16:54:15

Perl引用

2010-07-21 13:59:59

Perl引用

2010-07-16 13:10:36

Perl哈希表

2010-07-16 13:57:13

Perl哈希表

2009-11-17 17:07:01

PHP關聯數組

2009-11-24 19:40:07

PHP關聯數組查詢結果

2009-11-24 19:25:32

PHP關聯數組

2010-12-15 09:10:01

PHP關聯數組

2009-06-23 16:53:53

語義網Web3.0關聯數據

2010-07-15 14:54:50

Perl線程

2010-07-13 09:23:00

Perl變量
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产午夜精品视频 | 日韩精品在线播放 | 日韩一区二区三区在线观看 | 在线免费观看色 | 黄片毛片| 欧美舔穴 | 亚洲国产精品视频一区 | 夜夜艹天天干 | 国产精品成人一区二区三区 | 免费看一区二区三区 | 久久久久久看片 | 综合激情av | 国产专区在线 | 国产精品一区网站 | 91资源在线 | 欧美激情亚洲激情 | 黄色片在线观看网址 | 三级视频在线观看电影 | 天天干视频在线 | 欧美一区二区三区久久精品 | 精品国产免费一区二区三区五区 | 欧美一区二区三区在线看 | 999久久久久久久久6666 | 日韩在线一区二区 | www.久久久久久久久 | 亚洲1区 | 黄色毛片在线播放 | 羞羞视频免费在线观看 | 国产精品免费观看视频 | 国产精品亚洲综合 | 午夜精品久久久久久久久久久久 | 中文字幕一区二区三区四区五区 | 日韩视频一区在线观看 | 久久久久久亚洲精品 | 精品国产一区二区三区成人影院 | 伊人操| 日韩福利片 | 狠狠骚 | 国产成人精品一区二区 | 国产欧美一区二区精品久导航 | 日韩精品在线观看一区二区 |