第三章華中農(nóng)業(yè)生物信息中心_第1頁
第三章華中農(nóng)業(yè)生物信息中心_第2頁
第三章華中農(nóng)業(yè)生物信息中心_第3頁
第三章華中農(nóng)業(yè)生物信息中心_第4頁
第三章華中農(nóng)業(yè)生物信息中心_第5頁
已閱讀5頁,還剩24頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、第三章 哈希 劉 融 華中農(nóng)業(yè)大學(xué)生物信息中心哈希又被稱為散列或關(guān)聯(lián)數(shù)組,是一種數(shù)據(jù)結(jié)構(gòu),可以包含任意多個值,并以“鍵”來尋找相應(yīng)的值;鍵通常都是字符串,且可以是任意字符串,但彼此間不能相同,對應(yīng)的值則不受此限制。哈希的定義哈希的用途如果兩組數(shù)據(jù)間存在一一對應(yīng)的關(guān)系,且一組數(shù)據(jù)中的標(biāo)量值不存在重復(fù),這時可以使用哈希。例如:按IP地址查找主機(jī)名按身份證號找出姓名按單詞統(tǒng)計其出現(xiàn)次數(shù) 按基因名查找ORF 按蛋白質(zhì)ID查找氨基酸序列或結(jié)構(gòu)從DNA到Protein哈希賦值類似于數(shù)組,不同的是用于賦值的列表是一些“鍵/值”對。例如:%postcode=(Beijing, 100000, Shanghai

2、, 200001, Nanjing, 210001, Shenyang, 110001);注意:哈希里面的元素是沒有順序的,因此輸出的時候不一定是原來賦值的順序,但是對應(yīng)的“鍵/值”不會變化。postcode=%postcode;print “postcode”; #不能為“%postcode”胖箭頭= 它相當(dāng)于“,”,使賦值看上去更直觀。%postcode=( “Beijing”=100000,“Shanghai” =200001,“Nanjing” =210001,“Shenyang” =110001,);注意: (I)使用胖箭頭,可以省略鍵的引號; (II)最后一個逗號,不是必需的,但最

3、好寫上。哈希復(fù)制給哈希:%hash0=%hash1數(shù)組給哈希賦值:%hash=a;訪問hash元素 訪問hash元素,可以使用下面的語法:$hash $key %family_name=(fred=flintstone, barney=rubble);print $family_namefred.n;print $family_namebarney.n;foreach $person (qw) print $person : $family_name$person.n; 哈希的鍵值可以為表達(dá)式$str = bar; print $family_name$str.ney對已存在元素賦值會覆蓋之前

4、的值$family_namebarney=astaire;哈希元素因賦值而誕生$family_namewilma=rubble;訪問不存在的元素返回undef$granite= $family_namelarry練習(xí):對下表中的基因及相應(yīng)的表達(dá)量構(gòu)建哈希,從鍵盤輸入其中一個基因名,并打印其相應(yīng)的表達(dá)量。%gene_exp=(recA, 2.30, recB, 2.27 , recC, 2.42 , recD, 2.13 , recF, 1.24); print Enter the gene name:; chop ($find=); print $find has the expression

5、 value $gene_exp$findn; reverse函數(shù)進(jìn)行操作reverse %hash,會先將hash轉(zhuǎn)換成“鍵/值”對的列表形式(key1,value1,key2,value2keyn,valuen),然后翻轉(zhuǎn)列表同時鍵值互換,生成(valuen,keyn,value2,key2,value1,key1),此時原來的值成為鍵,鍵成為值。該操作適用于鍵和值一一對應(yīng)的情況,否則會造成值丟失。%postcode=(Beijing, 100000, Shanghai, 200001, Nanjing,210001, Shenyang,110001);citycode1= %postco

6、de;citycode2=reverse %postcode;print citycode1n;print citycode2;keys和values函數(shù)keys返回鍵列表,values返回值列表。%postcode=(Beijing, 100000, Shanghai, 200001, Nanjing,210001, Shenyang,110001);keys1=keys %postcode;values1=values %postcode;$keys1=keys %postcode;print keys1n;print values1n;print $keys1;each函數(shù)each用于迭

7、代訪問整個哈希,以包含兩個元素的列表形式返回“鍵/值”對,每調(diào)用一次each,返回下一組“鍵/值”對,通常用于while控制結(jié)構(gòu)中。%postcode=(Beijing, 100000, Shanghai, 200001, Nanjing,210001, Shenyang,110001);while($key,$value)=each %postcode) print $key=$valuen;遍歷哈希中的錯誤訪問哈希切片切片(slice)就是把數(shù)組或散列中的部分元素提取到一個新的數(shù)組。exists函數(shù)用來檢查哈希中是否存在某個鍵,與鍵對應(yīng)的值無關(guān)。 if(exists $books$dino

8、) print “Hey, theres a library card for dino!n”;注意:即使某個鍵對應(yīng)的值為空,它仍然存在。delete函數(shù)用于刪除哈希中某個鍵及其對應(yīng)的值$person = “betty”;delete $books$person; #將$person 的借書卡刪除掉獲取哈希大小%ages = (Martin = 28, Sharon = 35, Rikke = 29); print Hash size: ,scalar keys %ages,n; print Hash size: ,scalar values %ages,n; delete和exist的示例%

9、last_name = ( Jaime = Fraser, Brendan = Fraser, Lenny = Teytelman, Venky = Iyer,);print scalar keys %last_name ,n; delete $last_nameJaime;print scalar values %last_name ,n; if (exists $last_nameJaime) print Jaime has a last name!;else print Your name dose not exist!;哈希排序按鍵排序%hash = ( 123 = 54, 323 =

10、 165, 22 = 73, );foreach $key ( sort keys %hash ) print $key: $hash$keyn;print n;foreach $key ( sort $a$b keys %hash ) print $key: $hash$keyn;按值排序%hash=(Beijing, 107, Shanghai, 98, Nanjing, 100, Shenyang, 927);foreach $key ( sort $hash$a $hash$b keys %hash) print $key: $hash$keyn;print n;foreach $ke

11、y ( sort $hash$b $hash$a keys %hash) print $key: $hash$keyn;print n;foreach $key ( sort $hash$a cmp $hash$b keys %hash) print $key: $hash$keyn;print n;foreach $key ( sort $hash$b cmp $hash$a keys %hash) print $key: $hash$keyn;聯(lián)合鍵值排序%userids = ( williams = Marketing, smith = Research, johnson = Resea

12、rch, jones = Marketing, brown = Marketing, davis = Research);foreach (sort ($userids$a cmp $userids$b) | ($a cmp $b) keys %userids) print $_: $userids$_n;哈希使用示例打印數(shù)組中不重復(fù)的元素fishwords = (one,fish,two,fish,red,fish,blue,fish);%seen = ();foreach (fishwords) $seen$_ = 1;uniquewords = keys %seen;val = valu

13、es %seen;print uniquewords;print n;print val;打印兩個數(shù)組中相同或不同的元素grep按某種模式expr去匹配數(shù)組中的每個元素,匹配成功的元素組成一個新的數(shù)組,返回該新數(shù)組。grep EXPR, LISTarray = qw(greyhound bloodhound hello hand);hound = grep /hound/,array;print houndn;#打印出greyhound和bloodhound 練習(xí):利用哈希統(tǒng)計單詞數(shù)假設(shè)某個文件包含一列單詞,我們可以將其內(nèi)容先讀到數(shù) 組中,然后將其作為哈希鍵值進(jìn)行操作,那么該單詞出現(xiàn) 的次數(shù)就

14、是該鍵對應(yīng)的值file=qw/beijing shanghai wuhan zhejiang wuhan hubei beijing jilin qingdao liuzhou zhejiang/;foreach $word (file) $count$word+=1; while($key,$value)=each %count)print $key=$valuen;哈希的數(shù)組(Array of Hash)格式AoH = ( husband = barney, wife = betty, son = bamm, husband = george, wife = jane, son = elr

15、oy, husband = homer, wife = marge, son = bart, );添加元素push AoH, husband = fred, wife = wilma, daughter = pebbles ; 生成AOH已有文件中的數(shù)據(jù)格式如下 :husband=fred friend=barney husband=paul friend=laurie 生成AOH的代碼如下:while ( ) $rec = ;foreach $field ( split ) ($key, $value) = split /=/, $field; $rec-$key = $value; pus

16、h AoH, $rec; 訪問和打印AOH訪問單個元素格式: $AoH0husband; 遍歷打印AOHforeach $href ( AoH ) print ; foreach $role ( keys %$href ) print $role=$href-$role ; print n;foreach $i ( 0 . $#AoH ) print $i is ; foreach $role ( keys % $AoH$i ) print $role=$AoH$i$role ; print n;數(shù)組的哈希(Hash of Array)格式%HoA = ( flintstones = fred

17、, barney , jetsons = george, jane, elroy , simpsons = homer, marge, bart , );添加元素$HoAteletubbies = tinky winky, dipsy, laa-laa, po ; 生成HOA已有文件中的數(shù)據(jù)格式如下 :flintstones: fred barney wilma dinojetsons: george jane elroysimpsons: homer marge bart 生成HOA的代碼如下:while ( $line = ) ($who, $rest) = split /:s*/, $line, 2; fields = split , $rest; $HoA$who = fields ; 訪問和打印HOA訪問單個元素:$HoAflintstones0;遍歷打印HOA:哈希的哈希(Hash of Hash)%microarray_set = ( time0 = recA = 2.0, recB = 2.0, recC = 2.0, time2 = recA = 2.0, recB = 4.0, recC = 1.7, time4 = recA = 2.

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論